【问题标题】:Why isn't selenium successfully clicking my download link?为什么 selenium 没有成功点击我的下载链接?
【发布时间】:2022-01-26 18:32:41
【问题描述】:

我正在尝试使用 selenium 从网站下载 excel 文件。我不确定为什么代码不允许我下载它。我得到一个退出代码 0,所以一切都运行成功,但我没有在我的下载中看到该文件。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC



def scrape_mclellan_website():
    url = 'https://www.mcoscillator.com/market_breadth_data/'
    s = Service(ChromeDriverManager().install())
    op = webdriver.ChromeOptions()
    op.add_argument('headless')
    driver = webdriver.Chrome(service=s)

    driver.get(url)
    download_link = driver.find_element(by=By.XPATH, value='//*[@id="data_table"]/a[1]/img')
    download_link.click()

scrape_mclellan_website()

【问题讨论】:

  • 您是否尝试过在正常(非无头)模式下运行它并观察会发生什么?
  • 是的 - 行为是一样的
  • 您是否尝试单击锚点而不是 img? value='//*[@id="data_table"]/a[1]' - 没有无头模式。
  • QHarr 都嵌入了链接。很好的收获

标签: python selenium web-scraping


【解决方案1】:

如何解决?

等到您尝试单击的元素出现,然后单击<a> 而不是<img>

download_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="data_table"]/a[1]')))
download_link.click()

设置您对下载文件夹的偏好并注意窗口是否以正确的大小打开:

prefs = {'download.default_directory':'ENTER PATH TO DOWNLOAD FOLDER'}
options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080")
options.add_argument("--start-maximized")
options.add_argument("--headless")
options.add_experimental_option("prefs",prefs)

示例(硒 4)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

service = Service(executable_path='ENTER YOUR PATH TO CHROMEDRIVER')
prefs = {'download.default_directory':'ENTER PATH TO DOWNLOAD FOLDER'}
options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080")
options.add_argument("--start-maximized")
options.add_argument("--headless")
options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(service=service, options=options)
driver.get('https://www.mcoscillator.com/market_breadth_data/')

download_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="data_table"]/a[1]')))
download_link.click()

【讨论】:

  • 如果有人偶然发现这一点 - 解决方案是将 time.sleep(1) 添加到脚本中。似乎成功了。我尝试了 HedgeHog 的解决方案,但无法复制他的修复程序,但它让我认为浏览器在开始下载之前刚刚关闭。生病将其标记为正确,因为它让我足够接近。另外- img 和 text 都有下载链接。
猜你喜欢
  • 2020-11-27
  • 1970-01-01
  • 2017-06-13
  • 2021-01-25
  • 2021-05-02
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多