专栏首页江湖安得便相忘小笔记:python搜索引擎下拉框截图

小笔记: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 条评论
登录 后参与评论

相关文章

  • 一起学Rust-实战leetcode(七)

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    江湖安得便相忘
  • JS实现五子棋(一)目标分析

    最近很久不写js了,突然决定做一个五子棋的小游戏重温一下js的魅力,做完之后觉得有必要在这里做个记录,分享一下,重点记录一下实现的思路,设计过程。

    江湖安得便相忘
  • MySQL中DATETIME与TIMESTAMP

    真理永远都不过时,今天由于工作的事情涉及到了这里,印象中只记得DATETIME类型占用8字节,TIMESTAMP类型占用4字节,心想这么久没有更新的知识万一过时...

    江湖安得便相忘
  • web爬虫-用Selenium操作浏览器抓数据

    Selenium是一个基于Web的开源自动化工具。Python使用Selenium用于自动化测试。 特点是易于使用。Selenium可以将标准Python命令发...

    亚乐记
  • Appium+python自动化29-toast消息

    前言 appium1.5以后的版本才支持toast定位,并且 'automationName'得设置为'Uiautomator2',才能捕获到。 一、 Supp...

    上海-悠悠
  • Selenium系列(十六) - Web UI 自动化基础实战(3)

    https://www.cnblogs.com/poloyy/category/1680176.html

    小菠萝测试笔记
  • Spring 事务使用详解

    什么是事务?根据 维基百科事务 介绍,数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。简单来说,事务就是将一系...

    Java技术大杂烩
  • Product settype在CRM WebClient UI架构中的地位

    Product settype acts as a very important role in CRM WebClient UI architecture.

    Jerry Wang
  • Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. An attempt was made

    今天同事在一个服务器(winserver 2008 x64)上新建了一个IIS(7) 网站,但是报了如下错误:

    庞小明
  • Android 实现把bitmap图片的某一部分的颜色改成其他颜色

    dp(density-independent pixel):密度无关像素,当dpi为160时,1dp=1px,当dpi为320时,1dp=2px,以此类推……....

    砸漏

扫码关注云+社区

领取腾讯云代金券