selenium模拟浏览器解决反监测,获取cookies解决登录问题

        网络上设立了许多各种反爬的监测各式各样,但并不会非常的深入,如果要仔细获知应用了什么监测需要在控制台全局搜索webdriver去逆向分析一下再去设置将selenium伪装。

记录一下了解到的部分功能

按需添加:

#设置默认编码为utf-8,也就是中文
options.add_argument('lang=zh_CN.UTF-8')

#模拟androidQQ浏览器,指定UA
options.add_argument(
'user-agent="MQQBrowser/26Mozilla/5.0(Linux;U;Android2.3.7;zh-cn;MB200Build/GRJ22;CyanogenMod-7)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1"')

#禁止硬件gpu加速,谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--disable-gpu')

#取消沙盒模式,        # “–no-sandbox”参数是让Chrome在root权限下跑
options.add_argument('--no-sandbox')

#禁止弹窗广告
options.add_argument('--disable-popup-blocking')

#不加载图片, 提升速度
chrome_options.add_argument('blink-settings=imagesEnabled=false') 

#隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--hide-scrollbars') 

#设置最大界面
options.add_argument('--window-size=1920,1080')

#去掉自动控制标志
options.add_experimental_option('excludeSwitches',['enable-automation'])

#此方法针对V78版本及以上有效,同时可以解决部分网站白屏的问题。
options.add_experimental_option('useAutomationExtension',False)

##大量渲染时候写入/tmp而非/dev/shm
options.add_argument("-–disable-dev-shm-usage")
desired_capabilities=DesiredCapabilities.CHROME
desired_capabilities["pageLoadStrategy"]="none"

#忽略证书错误(实操后感觉没什么用)
options.add_argument('--ignore-certificate-errors')
 
#保存浏览历史下次读取直接读取里面的内容
dir_path = os.getcwd()
options.add_argument(f'user-data-dir={dir_path}/userData')
driver = webdriver.Chrome(executable_path=f'{dir_path}/Chrome_path/chromedriver.exe',options=options)
 
# 将window.navigator.webdriver属性变为undefined 防止检测
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})

上面操作基本上满足市面上大部分反监测上的应用伪装按需添加即可。

接着就是遇到需要登录的操作,部分网站没有登录是不允许加载出请求等,这种情况只需要获取cookies然后再载入到selenium即可。

以去哪儿旅游网为例:

获取cookie代码:

url = "https://flight.qunar.com/site/oneway_list.htm?searchDepartureAirport=%E5%8C%97%E4%BA%AC&searchArrivalAirport=%E4%B8%8A%E6%B5%B7&searchDepartureTime=2022-12-20&searchArrivalTime=2022-12-22&nextNDays=0&startSearch=true&fromCode=BJS&toCode=SHA&from=flight_dom_search&lowestPrice=null"
def get_cookie(driver,url):
    driver.get(url)
#登录步骤操作
    driver.find_element(By.CSS_SELECTOR,"#QunarPopBoxClosePop").click()
    driver.find_element(By.CSS_SELECTOR,"#__headerInfo_login__").click()
    driver.find_element(By.CSS_SELECTOR,".passwordTab").click()
    driver.find_element(By.CSS_SELECTOR,"#username").send_keys("账号")
    driver.find_element(By.CSS_SELECTOR,"#password").send_keys("密码")
    driver.find_element(By.CSS_SELECTOR,"#agreement").click()
    driver.find_element(By.XPATH,"//div[@data-reactid='.0.1.1.0.2.0.3']").click()
#解决滑块
    chunk = driver.find_element(By.CSS_SELECTOR,".OQphwVk_QrhLuedI5-Jme")
    pathway = driver.find_element(By.CSS_SELECTOR,".NrgjHeg7YBdiFd3U9T_j_")
    ActionChains(driver).drag_and_drop_by_offset(chunk, pathway.size['width'],pathway.size['height']).perform()

    time.sleep(1)
    cookies = driver.get_cookies()    #获取cookies并保存成json格式
    with open ("wherego.json","w") as file:
        json.dump(cookies,file)
    print(cookies)
    return cookies

载入cookies:

def add_cookies(driver,cookie_file):
    with open (cookie_file,"r") as file:
        cookie_list = json.load(file)
        for cookie_dict in cookie_list:
            if cookie_dict['secure']:
                driver.add_cookie(cookie_dict)
                print("添加cookie成功")

在载入cookies前要先载入一下页面再加入cookies,加入后要在网站刷新才会生效。(功能约束貌似没办法解决)

你可能感兴趣的:(Python,爬虫,selenium,测试工具,网络爬虫,python,cookies)