【问题标题】:Selenium/Python - Extract dynamically generated HTML after submitting formSelenium/Python - 提交表单后提取动态生成的 HTML
【发布时间】:2018-03-27 17:28:05
【问题描述】:

我试图访问的网页是使用 JavaScript 动态生成 HTML 表单(这个:https://imgur.com/a/rhmXB)。输入print(page_source) 时,表格似乎出现在输出的 HTML 中。

然而,在填写完输入框并提交表单后,会出现另一个带有验证码图片的输入框(如图:https://imgur.com/a/xVfBS)。输入print(page_source) 后,带有验证码的输入表单似乎没有插入到 HTML 中。

我的问题是:如何使用 Selenium 访问这个动态生成的 HTML,其中包含输入字段和验证码图像?

这是我的代码(另外,in pastebin):

from selenium import webdriver
driver = webdriver.Chrome("/var/chromedriver/chromedriver")

URL = 'http://nap.bg/link?id=104'
driver.get(URL)

input_field = driver.find_element_by_name('ipID')
input_field.send_keys('0000000000')
driver.find_element_by_id('idSubmit').click()
print(driver.page_source)

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    点击按钮后,页面需要一些时间来加载验证码和其他内容。您需要等待它完成加载。你可以使用 Selenium 的 explicit waits 来做到这一点。

    这是你可以做的一个例子:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    URL = 'http://nap.bg/link?id=104'
    driver.get(URL)
    
    input_field = driver.find_element_by_name('ipID')
    input_field.send_keys('0000000000')
    driver.find_element_by_id('idSubmit').click()
    
    wait = WebDriverWait(driver, 10)
    wait.until(EC.element_to_be_clickable((By.NAME, 'ipResponse')))
    
    print(driver.page_source)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2013-07-07
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多