我想在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命令,但没有成功。 任何帮助将受到高度赞赏。
答案 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