【问题标题】:Scrape an Ajax form with .submit() with Python and Selenium使用 Python 和 Selenium 使用 .submit() 抓取 Ajax 表单
【发布时间】:2021-05-21 11:34:09
【问题描述】:

我正在尝试从网页获取链接。网页使用 javascript 发送请求,然后服务器发送响应直接下载 PDF。这个新的 PDF 会自动下载到您的浏览器中。 我的第一种方法是使用 selenium 来获取信息:

# Path chromedriver & get url
path = "/Users/my_user/Desktop/chromedriver"
browser = webdriver.Chrome(path)
browser.get("https://www.holzwickede.de/amtsblatt/index.php")

# Banner click
ban = WebDriverWait(browser,15).until(EC.element_to_be_clickable((By.XPATH,"//a[@id='cc_btn_accept_all']"))).click()

#Element to get
elem = browser.find_element_by_xpath("//div[@id='content']/div[7]/table//form[@name='gazette_52430']/a[@href='#gazette_52430']")
elem.click()
print (browser.current_url)

结果是当前URL对应同一个网页,而请求是直接发给服务器的。

https://www.holzwickede.de/amtsblatt/index.php#gazette_52430

在这个不成功的结果之后,我尝试通过请求来获取它。

 # Access requests via the `requests` attribute
 for request in browser.requests: #It captures all the requessin chronologica order
     if request.response.headers:
         print(
             request.path,
             request.response.status_code,
             request.response.headers,
            request.body,
            "/n"

        )

结果仍然不是 PDF 来自的背后链接。 你们知道我能做什么吗? 提前致谢。

【问题讨论】:

    标签: python selenium-webdriver web-scraping beautifulsoup scrapy


    【解决方案1】:

    我找到了答案。该请求发送一个 POST 表单。因此,我们必须提取标题内容及其参数。当您知道表单发送的参数后,您可以使用请求来取回控制台的链接。

    response = requests.get(url, params={'key1': 'value1', 'key2': 'value2'})
    print (response.url)
    

    这个问题又解决了这个问题:Capture AJAX response with selenium python

    干杯!

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 2019-10-30
      • 2020-11-15
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多