刮擦结果与检查的DOM元素不同

时间:2018-01-04 04:59:16

标签: python python-3.x selenium selenium-webdriver

我想在Python中使用Selenium webdriver解析网页中的价格列表。所以,我尝试使用此代码

获取所有DOM元素
url = 'https://www.google.com/flights/explore/#explore;f=BDO;t=r-Asia-0x88d9b427c383bc81%253A0xb947211a2643e5ac;li=0;lx=2;d=2018-01-09'
driver = webdriver.Chrome()
driver.get(url)

print(driver.page_source)

我从page_source获得的问题与我在被视元素中看到的不同

<div class="CTPFVNB-f-a">
    <div class="CTPFVNB-f-c"></div>
    <div class="CTPFVNB-f-d elt="toolbelt"></div>
    <div class="CTPFVNB-f-e" elt="result">Here is the difference</div>
</div>

CTPFVNB-f-e类中存在差异。在经过检查的DOM元素中,此标记包含我要获取的所有价格。但是,在page_source的结果中,这部分缺失了。

有人能告诉我我的代码有什么问题吗?或者我是否需要进一步的步骤来解析价格清单?

1 个答案:

答案 0 :(得分:2)

JavaScript正在加载页面后修改页面。当您在打开页面后立即打印页面源时,您将获得初始代码而无需执行JavaScript。

您可以执行以下任何一项操作:

  • 添加延迟:使用time.sleep(x)(根据您的要求更改x值。以秒为单位)(推荐)< / LI>
  • 隐含等待 driver.implicitly_wait(x)(再次x与上述相同)
  • 显式等待:等待HTML元素出现,然后获取页面源。要了解如何执行此操作,请refer this link。 ( HIGHLY 推荐)

使用显式等待更好的选项,因为它只等待元素变得可见所需的时间。因此不会导致任何超额延迟。或者,如果页面加载速度低于预期,则无法使用隐式等待获得所需的输出。