分配最大数量。尝试while循环

时间:2014-05-23 05:13:22

标签: python-2.7 selenium

我对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()

2 个答案:

答案 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()