作为一个程序员,被女友提需求也也是常有的事情,最近就来了一个需求,需要截取指定搜索引擎的关键词下拉框截图,就是这种的,只要度娘搜索引擎的。
“小意思,一会就完事”,心中考虑着,先简单实现。
道具
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后再次运行。