在通过硒提交表单后,页面来源未反映更改

时间:2018-04-16 07:39:00

标签: python html selenium selenium-webdriver webdriver

我创建了一个脚本,用于填写表单并提交。 然后该网站显示结果。

一旦我使用selenium打开chrome,我得到driver.page_source并且它给出了初始状态的正确html输出。

如果我在提交表单后使用driver.page_source,我只会再次获得初始状态的来源,即:即使html发生了变化,也不会反映出任何变化。

问题:如何在提交表单后获得包含更改的页面的HTML输出?

提前感谢您的帮助! ps:我很新,所以是的..

编辑: 我找到了答案,它一直工作正常,但网页还没有完全加载,因此我仍然得到旧的源代码,所以我只是让驱动程序等待提取新源。 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将Selenium的当前页面传递给scrapy Selector,并使用常用的css和/或xpath选择器从中获取数据:

from tensorflow import logging
coloredlogs.install(level='DEBUG')
tf.logging.set_verbosity(tf.logging.DEBUG)

答案 1 :(得分:1)

在您提取page_source检查更改之前提交表单之后,值得一提的是,虽然 WebClient 在某个阶段可能已达到'document.readyState'等于"complete" Selenium 会恢复对程序执行的控制,但并不能保证所有新页面上关联的 Javascript Ajax Calls 已经完成。除非与 DOM树关联的 Javascript Ajax Calls 完成后,页面才会完全呈现,否则您可能无法跟踪预期的变化。

检查更改的理想方法是将WebDriverWaitexpected_conditions子句同时设置为title_contains,如下所示:

driver.find_element_by_xpath("xpath_of_element_changes_page").click()
WebDriverWait(browser, 10).until(EC.title_contains(("full_or_partial_text_of_the_new_page_title")))
source = driver.page_source

注意:当页面标题位于HTML DOM<head>标记内时,更好的解决方案是诱导WebDriverWait对于DOM Tree<body>标记内所有情况下都会出现的元素的可见性,如下所示:

driver.find_element_by_xpath("xpath_of_element_changes_page").click()
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "id_of_element_present_in_all_situation")))
source = driver.page_source