【问题标题】:I can not download PDF files from links generated from a javascript function with python 3.6.0 + selenium 3.4.3我无法从使用 python 3.6.0 + selenium 3.4.3 的 javascript 函数生成的链接中下载 PDF 文件
【发布时间】:2017-09-11 23:46:38
【问题描述】:

网址是:site

通过将 selenium 与 Firefox 47.0.2 二进制和 python 3.6.0 一起使用,我从这个页面单击“Pesquisar”按钮,然后在下一页中填写日期范围的表格(格式 d/m/y)并再次单击新的“Pesquisar”按钮,然后我得到一个 PDF 文档列表,我想下载它们。

当我打印 page_source 时,我可以看到生成的链接,但我不明白为什么 selenium 找不到这些链接。

简化代码如下:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from datetime import datetime, date, timedelta
from calendar import monthrange
import time


driver = webdriver.Firefox(firefox_profile=profile, firefox_binary=binary, capabilities=capabilities)
driver.maximize_window()
wait = WebDriverWait(driver, 10)

months = range(1, 13)
limits = monthrange(2017, 8)

#num_docs = limites[1]-limites[0]

date_input_begin = '{num:0{width}}'.format(num=limits[0], width=2) + '08' + '2017'
date_input_end = '{num:0{width}}'.format(num=limits[1], width=2) + '08' + '2017'

today = datetime.now().date()
date = today

date = date - timedelta(24)

driver.get("http://dje.trf2.jus.br/DJE/Paginas/Externas/inicial.aspx")

driver.find_element_by_id("ctl00_ContentPlaceHolder_ctrInicial_btnPesquisar").click()

wait.until(EC.presence_of_element_located(
    (By.XPATH, '//*[@id="ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_btnFiltrar"]')))

select1 = Select(driver.find_element_by_id("ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_ddlAreaJudicial"))
select1.select_by_index(3)

select2 = Select(driver.find_element_by_id("ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_ddlRegistrosPaginas"))
select2.select_by_index(6)

element_date_begin = driver.find_element_by_id(
    'ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_tbxDataInicial')
element_date_begin.clear()
element_date_begin.send_keys(date_input_begin)

element_date_end = driver.find_element_by_id(
    'ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_tbxDataFinal')
element_date_end.clear()
element_date_end.send_keys(date_input_end)

driver.find_element_by_id('ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_btnFiltrar').submit()

wait.until(EC.presence_of_element_located((By.ID, 'ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_btnFiltrar')))
wait.until(EC.element_to_be_clickable((By.ID, 'ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_btnFiltrar')))

time.sleep(5)
driver.find_element_by_id('ctl00_ContentPlaceHolder_ctrFiltraPesquisaDocumentos_btnFiltrar').click()

wait.until(EC.presence_of_element_located(
    (By.XPATH, '//*[@id="ctl00_ContentPlaceHolder_ctrListaDiarios_udtVisualizaAdmRj_lblNomeCaderno"]')))

driver.find_element_by_xpath(
    '//*[@id="ctl00_ContentPlaceHolder_ctrListaDiarios_udtVisualizaAdmRj_grvCadernos_ct102_lnkData"]').click()

但是当我通过 ID 或 XPATH 查找链接时,我收到以下错误:

文件“C:\Users\b2002032064079\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 194 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.NoSuchElementException:消息:无法定位元素:{"method":"xpath","selector":"//*[@id=\"ctl00_ContentPlaceHolder_ctrListaDiarios_udtVisualizaAdmRj_grvCadernos_ct102_lnkData\"]"}

我是爬虫的新手,如果能提供任何帮助,我将不胜感激!谢谢!

【问题讨论】:

    标签: javascript python selenium download screen-scraping


    【解决方案1】:

    首先:您使用的是哪种浏览器? 2:您的网站速度很慢。也许尝试给更多的等待时间。 3:xpath 是否正确?我认为问题出在 XPATH 尝试在 chrome 上使用 XPath helper 进行检查。

    【讨论】:

    • @biligung 关于xpath,我已将代码的最后一行更改为:driver.find_element_by_xpath('/html/body/form/div[7]/div/div/div[1]/div[2]/div/div[2]/div/table/tbody/tr[2]/td[1]/a').click(),其中xpath 现在是从firefox 上的firebug 获得的,并且可以正常工作,谢谢!关于等待时间,我还在尝试解决迭代下载。
    • 如果它有助于竖起大拇指 :D 如果你需要等待 -> 有一些方法使用 javascript 来检查页面是否重新加载但我不知道下载。它由操作系统对话框处理,因此只需手动设置即可。
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2023-01-27
    • 2021-12-01
    • 1970-01-01
    • 2018-01-16
    • 2021-04-02
    相关资源
    最近更新 更多