我在解析网页时遇到问题,因为我在执行以下操作时获得了不同的页面源:
display = Display(visible=False, size=(800, 600), backend='xvfb')
display.start()
driver = webdriver.Firefox()
url = "http://www.aaa.com"
driver.get(url)
with codecs.open('page.html', 'w', 'utf-8') as f:
f.write(driver.page_source)
当我打开文件查看实际文本时,它与我在浏览器中单击鼠标右键获得的内容不同。
例如,一些 href 变成小写。
以及页面源代码中的一些标签:
<table class="list" boroder="0" id="list_id">
转换成
<table border="0" id="list_id" class="list">
我很确定它与我请求的网址相同...
最佳答案
像您一样获取网页源有两个主要问题。
driver.page_source
和将文件源保存到磁盘所做的是在称为序列化的过程中将此 DOM 树转换回 HTML。两个序列化器,或一个用于两个不同配置的序列化器,可以序列化 相同的 DOM 树 不同的 。您遇到过这样的一个案例:<table class="list" border="0" id="list_id">
相对
<table border="0" id="list_id" class="list">
在上面的两个实例中,属性的顺序是不同的。但是,这无关紧要,因为属性在 HTML 中没有排序。 (元素以及标记元素开始和结束的标签是有序的。因此
<a><b>
与 <b><a>
不同。)由于序列化程序处理间距的方式,可能会出现其他差异。名称的大小写也可能不同:<TABLE>
和 <table>
是等效的。这是因为 HTML 不区分大小写(XHTML 区分大小写。)不能保证 Selenium 和 Firefox 的保存菜单将使用完全相同的序列化程序和完全相同的配置。因此,您从两种方法中获得的结果可能存在差异。
driver.page_source
保存页面,然后您使用 Firefox 的菜单手动保存页面,则可能会出现一些差异,因为 driver.page_source
缺少元素通过 Ajax 加载。 关于javascript - selenium 通过在浏览器中右键单击获取不同的页面源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22463894/