如何使用selenium webdriver转储整个dom结构

时间:2018-05-18 18:46:14

标签: javascript python selenium

我是selenium和python的新手,我在找到识别自动化所需页面元素的最佳方法时遇到了问题。 我有一个网页上有很多javascript。当我在登录表单中使用firefox的inspect元素作为用户名字段时,我看到一个带有id的输入标记,但是当我要求selenium找到该ID时,它说它无法找到。 我想仔细检查我在firefox中看到的实际上是selenium看到了什么,所以我尝试了:

with open("login.html","w") s f:
    f.write(driver.page_source)

我在结果文件中看不到任何输入元素。

根据我尝试的另一个stackoverflow问题:

DOM=driver.execute_script("return document.documentElement.outerHTML")
with open("login.html","w") as f:
    f.write(DOM)

仍然没有输入元素。

有没有更好的方法来查看所有dom元素和/或找到正确的xpath / id来起诉我的selenium脚本?

2 个答案:

答案 0 :(得分:0)

尝试按document.body.innerHTM

获取所有正文HTML
html = driver.execute_script("return document.body.innerHTML;")
with open("login.html","w") as f:
    f.write(html)

答案 1 :(得分:0)

@yong,你在execute_script之前添加长睡眠的建议才是正确的答案。现在我可以在我创建的文件中看到整个html源代码。

此外,现在我的PageObject代码可以填写登录表单并提交。我再睡一觉,然后打印pageurl和title,以确保我已经转到下一页。

最终代码:

driver = webdriver..Firefox()
driver.set_page_load_time(60)
driver.get(URL)
time.sleep(60)
print("URL: "+driver.current_url)
print("Title: "driver.title)
page=LoginPage(driver)
page.username="username"
page.password="password"
page.signin_button.click()
time.sleep(60)
print("URL: "+driver.current_url)
print("Title: "+driver.title)
driver.quit()

感谢大家的建议。