ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python使用selenium模拟浏览器爬取某查查数据

2021-05-07 20:02:06  阅读:212  来源: 互联网

标签:webdriver option Python driver selenium window 爬取 add navigator


        在使用爬虫爬取某查查的数据的时候,会被识别到,进行反爬限制,最后使用selenium模拟浏览器进行爬取。

        这里解决办法主要使用selenium打开浏览器,模拟人操作进行爬取,代码:

ua = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
#这里是用来隐藏弹出框的,如果没有这个,某查查会弹出提示框,会影响下一步操作
option = webdriver.ChromeOptions()
prefs = {
            'profile.default_content_setting_values': {
                'notifications': 2
            }
        }
option.add_experimental_option('prefs', prefs)

option.add_argument('--disable-gpu')

# 使用浏览器开发者模式,配置实验性功能参数
option.add_experimental_option('useAutomationExtension', False)
option.add_experimental_option('excludeSwitches', ['enable-automation'])
#这里使用无头浏览器,如果要观察整个操作流程,可以将此代码注释掉
option.add_argument('--headless')
option.add_argument('--no-sandbox')
option.add_argument('--disable-dev-shm-usage')
option.add_argument('user-agent=' + ua)
driver = webdriver.Chrome(executable_path="C:\Program Files\Google\Chrome\Application\chromedriver",
                                  chrome_options=option)

# 修改谷歌开发者工具中的新属性window.navigator.webdriver
# 在加载网页js之前,将window.navigator.webdriver属性隐藏
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
            "source": """
                                               Object.defineProperty(navigator, 'webdriver', {
                                                 get: () => undefined
                                               })
                                             """
        })

driver.get('https://www.qcc.com/')
#休眠3秒
time.sleep(3)
#找到输入框的id,这里通过id定位
webelement = driver.find_element_by_id("searchkey")
driver.implicitly_wait(2)

# 输入文本,注意,如果搜索中文的,需要在前面加u,代表Unicode编码
webelement.send_keys(u'企查查')
time.sleep(2)
#输入完成后,找到查找按钮,然后点击查找按钮
webelement = driver.find_element_by_xpath('//*[@id="indexSearchForm"]/div[1]/span/input')
webelement.click()
time.sleep(2)
print driver.page_source

        整个流程就如代码所示,我这里查询的时候不需要登录就能查到需要的数据,如果是需要登录的,也是类似的原理,无法就是多走一步,先登录,然后再进行查询。这里遇到的最主要的三个问题以及解决办法如下:

        1、打开网页后,有弹框影响下一步操作

        解决办法:如代码中所示,影藏弹框

        2、根本无法打开查询页面

        解决办法:一般是window.navigator.webdriver属性问题,我这里就是这个问题,可以先手动打开页面,查询window.navigator.webdriver属性是什么,F12打开Console,输入window.navigator.webdriver即可,这里是undefined,但是如果我们用浏览器打开,window.navigator.webdriver属性会显示是true,因此代码中将此属性隐藏。

        3、一切完毕后,发现根本没法在输入框输入查询

        解决办法:无意间发现的,基本都是搜索中文公司,无意间发现搜索英文名的公司就能打开,因此判断是需要使用Unicode编码进行搜索,因此在代码中字符串前面加个u,也可以使用三方转码工具进行转码操作。

标签:webdriver,option,Python,driver,selenium,window,爬取,add,navigator
来源: https://blog.csdn.net/qq_41061437/article/details/116498541

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有