迭代点击href链接列表

时间:2017-09-25 07:27:55

标签: python selenium

我想迭代href链接并点击每个链接。我的问题是我无法提取href,因为它对我没有帮助,当我点击它时我得到一个空页面。我应该直接点击按钮列表。

共有21个节点,hrefList由21个项目组成。

这是html的例子:

<div class="inner25">
<a href="https://www.ida.org.il/?categoryId=96318&itemId=236252">כרטיס רופא ></a>
</div>

<div class="inner25">
<a href="https://www.ida.org.il/?categoryId=96318&itemId=238647">כרטיס רופא ></a>
</div>

我的代码是:

hrefList = driver.find_elements_by_xpath(".//a[contains(text(), 'כרטיס רופא')]")
for link in hrefList:
   link.click()

网站链接为:https://www.ida.org.il/?pageType=19&langId=1&paramIds=%2Con_321%2Con_322%2Con_354%2Con_355%2Con_320&scope=&parameterSearch=

在每个广场,你都会看到医生。我想点击它们中的每一个。

我发现循环打开第一个链接然后失败。可能有什么问题?

I tried also this code:
            for href in range(1,3):
                hrefList[href].click()

First link it open, and then failed.
This is an error :
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py", line 78, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webelement.py", line 499, in _execute
    return self._parent.execute(command, params)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 297, in execute
    self.error_handler.check_response(response)
  File "C:\Program Files\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=60.0.3112.113)
  (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.15063 x86_64)

2 个答案:

答案 0 :(得分:0)

使用此xapth,它会返回您网站的21个节点

//a[contains(@href, 'https://www.ida.org.il/?categoryId=96318&itemId')]

这段代码用Java编写。你必须回到主页并找到元素

public static void main(String[] args) {

String URL="https://www.ida.org.il/?pageType=19&langId=1&paramIds=%2Con_321%2Con_322%2Con_354%2Con_355%2Con_320&scope=&parameterSearch=";
WebDriver driver=new FirefoxDriver();
driver.get(URL);
List<WebElement> links=driver.findElements(By.xpath("//a[contains(@href, 'https://www.ida.org.il/?categoryId=96318&itemId')]"));
System.out.println("Total links: "+links.size());
for (int i=0;i<links.size();i++) {
links.get(i).click();
System.out.println(i+"Current URL is: "+driver.getCurrentUrl());
driver.navigate().back();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
links=driver.findElements(By.xpath("//a[contains(@href, 'https://www.ida.org.il/?categoryId=96318&itemId')]"));
}   
driver.close();

}

答案 1 :(得分:0)

初学者问题。您可以找到许多与陈旧元素异常相关的问题。

您永远不应该使用已经找到的对象列表来执行在循环中更改页面的操作,否则您将获得陈旧元素,因为该元素未附加到DOM。

您应该将所有href值保存在列表中,然后在循环中,您应该根据保存的href值执行find元素,并单击找到的元素。

如果页面更改/重新加载,则需要再次找到该元素。