Selenium:如何提取用户交互生成的新HTML片段?

时间:2017-04-10 07:54:34

标签: python html selenium web-scraping calendar

背景

我正在编写一个脚本,使用Python和Selenium自动化一组网站的Web表单提交。但是,脚本需要在类似的网站上工作,其中基础HTML和表单的一般结构预先未知

我已经设法使标准输入字段(例如文本字段,单选按钮等)运行良好,但是我在处理日期选择器字段时遇到了困难,因为这些字段非常特定于站点。

尽管存在这些特定于站点的差异,但似乎存在一种常见的使用模式:(i)单击日期选择器字段以显示日历弹出窗口;然后(ii)点击所需的日期。

通过单击日期选择器字段显示弹出日历非常简单,并且会在页面源中的某处插入新的HTML片段(定义日历)。如果我只能提取这个新的HTML片段,那么我可以使用这些信息来推断输入字段是日历以及如何与它进行交互。

问题

如何提取由用户交互生成的新HTML代码,例如单击输入字段?

1 个答案:

答案 0 :(得分:0)

根据用户的反馈编辑回复

获取元素

的html内容

如何获得&使用python / selenium打印WebElement实例内容:

my_web_element.get_attribute('innerHTML')
# Or, depending what you want
my_web_element.get_attribute('outerHTML')

如何等待元素

在此示例中,我点击ID为“target”的链接,并等待ID为“calendar”的元素可见。

driver.find_element_by_id('target').click()
calendar = WebDriverWait(driver, 30).until(
    ec.visibility_of_element_located((By.ID, 'calendar'))
)

结论

from selenium import webdriver
from selenium.webdriver.support.ui  import WebDriverWait
import selenium.webdriver.support.expected_conditions as ec
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get('http://spam.egg.bacon')

driver.find_element_by_id('target').click()
calendar = WebDriverWait(driver, 30).until(
    ec.visibility_of_element_located((By.ID, 'calendar'))
)

print calendar.get_attribute('innerHTML')

使用此完整示例打印:<div id="calendar">I'm a calendar</div>https://gist.github.com/arount/285e5add758bb14074efc4708f1d6b07