试图在python中循环链接与selenium

时间:2014-04-23 13:01:40

标签: python selenium scrapy

我想在python中使用selenium循环一组链接。 我试图关注this explanation但没有成功。 我一直得到“陈旧的元素引用错误(我正在尝试使用WebDriverWait)。 我的代码如下:

list_of_links = mydriver.find_elements_by_xpath('//ul[@class="directory dir-col"]/li/a')
for link in list_of_links:
UI.WebDriverWait(mydriver, 30).until(lambda mydriver:mydriver.find_element_by_xpath('//ul[@class="directory dir-col"]/li/a'))        
link.click()
mydriver.back()

我确实尝试在click和back命令之前和之后放置webdriver wait命令,但没有成功。 任何帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

问题在于,一旦离开页面,list_of_links中的元素就会过时。

假设每个链接都有不同的文本,这种方法应该对您有用:

list_of_links = mydriver.find_elements_by_xpath('//ul[@class="directory dir-col"]/li/a')
list_of_linktext = []
for link in list_of_links:
    list_of_linktext.append(link.text)

for linktext in list_of_linktext:
    mydriver.find_element_by_link_text(linktext).click()
    mydriver.back()

答案 1 :(得分:0)

根据理查德的想法,我决定循环使用xPath值,而不是链接文本(可以是相同的),我最终得到的代码是:

import lxml.html as lh
import urllib2
from selenium import webdriver

htmlObject = lh.parse(urllib2.urlopen(start_url))
listOfPaths = htmlObject.xpath('//ul[@class="directory dir-col"]/li/a')
listOfLinkPathes = []
for link in listOfPaths:
    listOfLinkPathes.append(htmlObject.getpath(link))
for linkPath in listOfLinkPathes:
   mydriver.find_element_by_xpath(linkPath).click()
   mydriver.back()

答案 2 :(得分:-1)

对于此类任务,我建议您使用irobotsoft web scraper。该视频展示了如何操作:http://irobotsoft.com/help/record%20robot.swf