无法使用 selenium 和 python 在 crome 中下载 zip 文件

问题描述 投票:0回答:2

以下代码在我的系统中运行良好,并且正在下载一个 zip 文件。

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://omayo.blogspot.com/p/page7.html')
time.sleep(2)
elem = driver.find_element(By.XPATH, '//*[@id="post-body-5268577013364905338"]/ul/li/a')
elem.click()

现在我尝试使用以下代码从公共网站下载文件。但它没有被下载。可能是什么原因? 我什至尝试了无头模式,但它没有解决问题。 我可以毫无问题地手动下载文件。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
#from selenium.webdriver.chrome.options import Options
import time
driver = webdriver.Chrome()
driver.get('https://broadbandmap.fcc.gov/data-download/nationwide-data?version=jun2022')
time.sleep(2)
elem = Select(driver.find_element(By.XPATH, '//*[@id="state"]'))
elem.select_by_visible_text('Alabama')
time.sleep(2)
elem1 = driver.find_element(By.XPATH, '//*[@id="content"]/app-nationwide-data/div/div[5]/div[1]/div/table/tbody/tr[1]/td[2]/button/span[1]')
elem1.click()

python selenium-webdriver browser webdriver
2个回答
0
投票

脚本无法下载文件的原因可能是它在完全加载之前单击了元素。为了解决这个问题,添加了显式等待(Webdriver Wait)以确保元素在脚本继续单击它之前是可单击的,从而成功下载了文件。

此外,该网站阻止脚本下载文件,因为它被检测为机器人。为了克服这个问题,我使用了 Undetected-Chromedriver 而不是常规的 Chromedriver。如果您也遇到类似问题,切换到 Undetected-Chromedriver 可能是一个有用的解决方案。 undetected-chromedriver

 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import undetected_chromedriver
# from selenium.webdriver.chrome.options import Options
import time

# driver = webdriver.Chrome()
driver = undetected_chromedriver.Chrome()
driver.get('https://broadbandmap.fcc.gov/data-download/nationwide-data?version=jun2022')
time.sleep(2)
elem = Select(driver.find_element(By.XPATH, '//*[@id="state"]'))
elem.select_by_visible_text('Alabama')
elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,
                                                                   '//*[@id="content"]/app-nationwide-data/div/div[5]/div[1]/div/table/tbody/tr[1]/td[2]/button/span[1]')))
elem.click()

0
投票

如果你在请求中添加一些cookie,你的问题就会得到解决。您可以通过

add_cookie()
方法将cookie添加到驱动程序。

此请求的 cookie 键是

ak_bmsc
。您可以在您的 chrome 中手动获取 cookie 并将其添加到您的驱动程序中。请注意,将参数传递给
add_cookie()
函数的格式是
{"name":" cookie_name", "value": "cookie_value}
.

cookies

将此 cookie 传递给您的驱动程序后,您的脚本应该可以正常工作。你可以这样做:

driver.get("https://google.com")
driver.delete_all_cookies()
driver.add_cookie({"name": "ak_bmsc", "value": "cookie_value"}
#  remainder of your script
© www.soinside.com 2019 - 2024. All rights reserved.