python - 确定页面中的所有下载链接,然后下载所有文件
问题描述
我想下载站点中的所有文件。所有文件都有一个带有文本=“下载”的链接,点击它会下载每个文件。
每个文件的html是这样的:
<a abc-id="0" href="#" class="todown" nc="0">Download</a>
在每个文件的 XPath 中,唯一改变的值是tr
这样的数字:
//*[@id='dwn']/div/table[1]/tbody[1]/tr[1]/td[3]/a
//*[@id='dwn']/div/table[1]/tbody[1]/tr[2]/td[3]/a
.
.
.
//*[@id='dwn']/div/table[1]/tbody[1]/tr[100]/td[3]/a
我当前的代码在下面,但我有几个time.sleep()
和...click()
命令,每个文件一个:
import time
from selenium import webdriver
driver = webdriver.Chrome("C:\webdrivers\chromedriver.exe")
driver.get ("http://www.examplesite.com/")
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[1]/td[3]/a").click()
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[2]/td[3]/a").click()
.
.
.
time.sleep(3)
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr[100]/td[3]/a").click()
可能有人帮助我如何使用一种循环下载页面中的所有文件,因为文件的数量并不总是相同的。
提前致谢
解决方案
对于您给定的代码,如果仅更改值是 TR,那么您可以通过增加其循环计数器值来循环所有 TR 标记。
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome("C:\webdrivers\chromedriver.exe")
driver.get ("http://www.examplesite.com/")
time.sleep(3)
length_of_tr = 100
for i in range(1,length_of_tr):
driver.find_element_by_xpath("//*[@id='dwn']/div/table[1]/tbody[1]/tr["+str(i)+"]/td[3]/a").click()
sleep(3)
您可以决定如何定义 tr 的长度。您可以在运行代码时动态获取 tr 标签的长度,也可以在代码内定义一个范围。
推荐阅读
- django - 将 rest_framework_simplejwt 与 Django 1.11.x 和 Python 3.6.2 一起使用
- swift - 本地化 .strings 疑难解答
- xml - bpmn:process 和 bpmn xml 中的 process 有什么区别?
- javascript - React-Bootstrap 下拉按钮宽度随标题道具值长度而增加
- google-oauth - 我们的 SaaS 多租户 webapi 的 Google oAuth 域问题
- ruby-on-rails-3 - 如何使用 GraphQL 在数据库中查询只提取选定字段而不是所有字段的位置?
- symfony - 如何在多对多关系字段上进行排序
- php - Laravel 将参数传递给函数而不遵循顺序
- html - 如何使 HTML 和 R 上的超链接更高效?
- autosys - Autosys 作业显示成功但失败