【问题标题】:Trying to loop links with selenium in python尝试在 python 中使用 selenium 循环链接
【发布时间】:2014-04-23 13:01:40
【问题描述】:

我想在 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()

我确实尝试在单击和返回命令之前和之后放置 webdriver 等待命令,但没有成功。 任何帮助将不胜感激。

【问题讨论】:

    标签: python selenium scrapy


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

      基于 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()
      

      【讨论】:

        【解决方案3】:

        对于此类任务,我建议您使用 irobotsoft 网络爬虫。这个视频展示了如何做到这一点:http://irobotsoft.com/help/record%20robot.swf

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-09
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 2021-08-21
          • 2017-11-19
          • 2019-08-31
          相关资源
          最近更新 更多