selenium 避免被识别
# @Author : Jacob-ZHANG import requests,base64 from PIL import Image import csv,re from selenium import webdriver import time,random #1启动浏览器。 #win browser=webdriver.Chrome(executable_path='driver/chromedriver.exe') #mac #browser=webdriver.Chrome(executable_path='driver/chromedriver') #2加入这个脚本可以避免被识别 browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) #3延迟10s启动 browser.implicitly_wait(10) #4利用谷歌浏览器打开目标网页 browser.get('https://pro.xxxxxx.com/searchx') #5将窗口最大化 browser.maximize_window() #6给网页一些时间加载 time.sleep(random.randint(1, 2)) ... ... ...
需要说明的是:
第一,selenium库距今已经有近20年的历史,各类网站、浏览器大多都能对它进行识别,因此为了避免被反爬,我可以通过加入上述脚本(#2)来防止网站的识别。 第二,因为在完成#4的操作,也即利用浏览器打开网页后,显示的网页页面并非是最大化的窗口,这导致页面元素存在难以定位、从而报错的情况,因此我们在此处加上了窗口最大化的操作(#5)。 第三,在以后的操作里,类似#6的代码会频频出现,这主要是因为受限于网速,不得不为网页加载提供更多时间。