我对Stackoverflow的最后经历很棒,我感谢所有帮助过我的人。 我现在正试图在代码中搜索该网站上的不同页面。
但是,当我尝试点击下一页时,我有以下问题,我不知道如何传递它们,
1)下一页按钮的Xpath随总数的变化而变化。搜索结果 例如。如果有5页,那么xpath是// html / body / div [1] / div [7] / div [1] / div [1] / div [3] / div / div / ul / li [7 ]/一个' 如果有10则那么xpath就是 // HTML /体/格[1] / DIV [7] / DIV [1] / DIV [1] / DIV [3] / DIV / DIV / UL /利[12] / A'
我决定为那些有10页或更多页面的页面创建2个不同的脚本,一页少于10页, 但即使我这样做,我仍然无法使脚本停止,因为即使在浏览器中禁用了下一页按钮,脚本也会一直单击下一页。我不可能在没有任何条件后停止脚本停止。 OF ATTEMPTS。
有人可以为此建议解决。 我只是粘贴浏览页面的代码,因为一旦python知道在哪里停止,提取数据就很容易了!
先谢谢,这是我的代码。
import fileinput
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
import lxml.html
import Tkinter, tkFileDialog
from collections import defaultdict
from selenium.common.exceptions import NoSuchElementException
path_to_chromedriver = 'chromedriver.exe'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
browser.get('http://targetstudy.com/school/schools-in-chhattisgarh.html')
time.sleep(3)
while ((browser.find_element_by_xpath('//html/body/div[1]/div[7]/div[1]/div[1]/div[3]/div/div/ul/li[11]/a').is_enabled()):
browser.find_element_by_xpath('//html/body/div[1]/div[7]/div[1]/div[1]/div[3]/div/div/ul/li[11]/a').click()
time.sleep(2)
print 'something'
else:
browser.close()
答案 0 :(得分:2)
我认为这会奏效:
while browser.find_element_by_xpath("(//ul[@class='pagination']/li)[last()]").get_attribute("class") != "disabled":
browser.find_element_by_xpath("(//ul[@class='pagination']/li/a)[last()]").click()
time.sleep(2)
print 'something'
else:
browser.close()
这个想法是:
li
class="disabled"
li
li/a
,即下一页链接答案 1 :(得分:1)
亲爱的用户,您可以在while循环之间使用break语句,如下面的代码 试试这段代码并添加你的最大数量我希望能帮到你。
counter = 0 while
((browser.find_element_by_xpath('//html/body/div[1]/div[7]/div[1]/div[1]/div[3]/div/div/ul/li[11]/a').is_enabled()):
browser.find_element_by_xpath('//html/body/div[1]/div[7]/div[1]/div[1]/div[3]/div/div/ul/li[11]/a').click()
time.sleep(2)
print 'something'
counter = counter + 1
if counter > "Your Maximum Number":
break
else:
browser.close()