在Python中使用Selenium循环链接
我想用Python中的Selenium循环访问一组链接。 我尝试按照这个说明去做,但没有成功。 我一直遇到“过时元素引用错误”(我在尝试使用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()
我确实尝试过在点击和返回命令之前和之后放置webdriver等待命令,但仍然没有成功。 任何帮助都会非常感激。
3 个回答
-2
对于这类任务,我建议你使用irobotsoft的网页抓取工具。这个视频展示了怎么使用它:http://irobotsoft.com/help/record%20robot.swf
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()
0
根据Richard的想法,我决定用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()