小笔记:python搜索引擎下拉框截图

作为一个程序员,被女友提需求也也是常有的事情,最近就来了一个需求,需要截取指定搜索引擎的关键词下拉框截图,就是这种的,只要度娘搜索引擎的。

“小意思,一会就完事”,心中考虑着,先简单实现。

道具

python3 + selenium

chromedriver

google-chrome

说写就写

百度的搜索使用get参数获取关键词,主要是wd起作用,由于仅使用第一页,所以不需要考虑翻页的参数

https://www.baidu.com/s?wd=北京时间

不废话,老规矩,获取到webdriver直接get url

from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument('--headless')
option.add_argument('--disable-gpu')
option.add_argument('user-agent="%s"' % user_agent)
driver = webdriver.Chrome(options=option)
driver.get(url)

度娘的下拉框比较友好,直接靠点击事件就可以唤起,所以通过检查元素找到输入框的id

直接右键copy ---> copy xpath,熟悉或者喜欢css selector的同学也可以点击copy ---> copy selector

driver.find_element_by_xpath('//*[@id="kw"]').click();

然后截图

driver.set_window_size(w, h);  # 设置窗口宽高比下拉框稍大一圈即可
driver.save_screenshot(filename);

成果

哎?数据好像和直接访问咋有点不一样呢?先交上去问问咋回事。。。

“不对!你这下拉框截的图不对!这是开启预测的结果,不要这样的,要关闭预测的”

原来还有这个说道,于是在犀利的指导下,知道了开启预测和关闭预测的位置。

初步考虑同样使用模拟点击,通过开发者工具模拟点击测试,可以修改。

经过在程序内使用函数 find_element_by_css_selector 修改尝试并没有起到任何作用,于是又尝试了 execute_script ,延迟执行等等同思路方法,都没有奏效。

新尝试

元素模拟点击不行,可以看下网络请求是否有不同,每一次关键词检索后,再次点击输入框会发起一次请求

返回数据就是下拉框内容。

于是我比较了开启和关闭预测时的两次请求有什么不同。两次的GET参数除了常规的签名和时间戳变化,没有异同。

于是我比较了cookie,结果很喜人,的确有一个cookie值发生了变化,

ORIGIN = 2的情况就是关闭预测,设置cookie后再次运行。

完美~ 交差

本文分享自微信公众号 - 可回收BUG(way-of-full-stack)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券