我目前正在尝试单击多个链接,这些链接将导致文件下载。但是,我无法单击多个文件

时间:2019-08-05 17:28:53

标签: python selenium xpath python-requests

我正在尝试创建代码,该代码将单击网页上的多个链接,从而依次下载文件。但是,我写了一个包含所有链接的XPath。尝试单击时出现此错误:“ click()接受1个位置参数,但给出了2个”。

是否可以使用硒中的.click()函数单击所需XPath中的所有链接?

这是我尝试使用的10个文件:

browser.find_element_by_xpath("//a[starts-with(@href,'sys_attachment.do') and @class='linked formlink']").click('href')

是否有更好的方法通过XPath下载所有这些文件?谢谢。

2 个答案:

答案 0 :(得分:0)

如果要查找许多元素,请在单词find_elemenets_...中使用selements,并获得包含许多元素的列表。然后,您必须使用for循环才能在每个元素上单独使用click()(不带参数)。

all_items = browser.find_elements_by_xpath("//a[starts-with(@href,'sys_attachment.do') and @class='linked formlink']")

for item in all_items:
    item.click()

问题是click更改页面时,因为项目停止存在,您必须返回,再次查找所有项目,然后单击列表中的下一个元素-但您必须记住以前单击的项目的索引。

答案 1 :(得分:0)

您应该使用find_elements_by而不是element,以便可以遍历元素列表,然后单击每个元素,例如:

clickList = browser.find_elements_by_xpath("//a[starts-with(@href,'sys_attachment.do') and @class='linked formlink']")

for count, elem in enumerate(clickList):
  # I am refreshing the list in case the DOM is changed
  currentList = browser.find_elements_by_xpath("//a[starts-with(@href,'sys_attachment.do') and @class='linked formlink']")
  currentList[count].click()