Python第三方库undetected_chromedriver的使用
作者:Docda 发布时间:2022-12-06 14:29:27
标签:undetected,chromedriver,python,第三方库
undetected_chromedriver是专门针对浏览器识别做出来的拓展
直接使用undetected_chromedriver第三方库
if __name__ == '__main__':
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
import undetected_chromedriver.v2 as uc
chrome_options = uc.ChromeOptions()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument("--profile-directory=Default")
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--disable-plugins-discovery")
chrome_options.add_argument("--incognito")
chrome_options.add_argument('--no-first-run')
chrome_options.add_argument('--no-service-autorun')
chrome_options.add_argument('--no-default-browser-check')
chrome_options.add_argument('--password-store=basic')
chrome_options.add_argument('--no-sandbox')
driver = uc.Chrome(options=chrome_options, executable_path='./driver/chromedriver')
driver.delete_all_cookies()
driver.get("https://accounts.google.com/signin/v2/identifier?service=accountsettings&continue=https%3A%2F%2Fmyaccount.google.com%3Futm_source%3Daccount-marketing-page%26utm_medium%3Dgo-to-account-button&flowName=GlifWebSignIn&flowEntry=ServiceLogin")
driver.find_element_by_xpath('//input[@type="email"]').send_keys(email)
input = WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.XPATH, '//*[@id="identifierNext"]')))
input.click()
WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.XPATH, '//*[@id="password"]/div[1]/div/div[1]/input')))
driver.find_element_by_xpath('//*[@id="password"]/div[1]/div/div[1]/input').send_keys(password)
input = WebDriverWait(driver, 100).until(expected_conditions.element_to_be_clickable((By.XPATH, '//*[@id="passwordNext"]/div/button')))
input.click()
time.sleep(5)
cookies = driver.get_cookies()
cookies_arr = []
for c in cookies:
if c['domain'].endswith('.google.com'):
cookies_arr.append(f'{c["name"]}={c["value"]}')
driver.close()
return "; ".join(cookies_arr)
使用seleniumwire的undetected_chromedriver拓展,好处是可以直接获取到浏览器的请求记录
from seleniumwire.undetected_chromedriver.v2 import Chrome, ChromeOptions
import time
if __name__ == '__main__':
options = {}
chrome_options = ChromeOptions()
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-dev-shm-usage")
# chrome_options.add_argument("--headless")
chrome_options.add_argument(f"--proxy-server=http://192.168.100.24:60021")
chrome_options.add_argument("--disable-popup-blocking")
chrome_options.add_argument("--profile-directory=Default")
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--disable-plugins-discovery")
chrome_options.add_argument('--no-first-run')
chrome_options.add_argument('--no-service-autorun')
chrome_options.add_argument('--no-default-browser-check')
chrome_options.add_argument('--password-store=basic')
chrome_options.add_argument('--no-sandbox')
browser = Chrome(seleniumwire_options=options, options=chrome_options,executable_path='C:\Program Files\Google\Chrome\Application\chromedriver.exe',version_main=101)
browser.get('https://portal.thecourierguy.co.za/track?ref=TCG107468416T')
time.sleep(15)
print(browser.page_source)
for request in browser.requests:
if request.response:
print(request.path)
if 'shipments' in request.path:
print(request.response.body)
#获取内容为乱码可尝试用以下方法解码
#gzip.decompress(request.response.body).decode("utf-8")
其中version_main可以根据浏览器版本指定版本号
注意:
      使用seleniumwire.undetected_chromedriver有一个大坑
      输入executable_path不会生效,因为在webdriver的源码是单独引用的undetected_chromedriver
所以不会接收到传入的executable_path。
而在undetected_chromedriver源码中,如果没有传入path就会每次启动去官网重新下载一个新的驱动器,再编译成可执行的文存放在以下目录
解决办法:
      在webdriver的源码中指定executable_path
这个带有前缀id的chromedriver是有执行权限的可执行程序啦
(直接使用官网下载的可能会没有权限,可以先直接运行一次,去到对应目录下面找到一个就可以永久使用啦<其他的可以删除>)
来源:https://blog.csdn.net/qq_43035475/article/details/125644970


猜你喜欢
- 步骤:1.从php.net上面下载php5.3.x版本的源码;2.centos安装相应的扩展包:yum install libmcrypt
- PHP Warning: strtotime(): It is not safe to rely on the system's t
- 本文实例为大家解析了vue中track-by的属性,供大家参考,具体内容如下api:http://cn.vuejs.org/guide/li
- base.html:{% extends "bootstrap/base.html" %}{% block styles
- cv2库在opencv库内,因此需要下载opencv-python1、打开windows命令行:win+Rcmd2、更新pip版本(不一定要
- 前几天翻出以前写的一个纯CSS仿微软经典菜单,现在看来才感叹,微软的经典菜单确实很经典,至少看起来不觉得厌烦。感叹归感叹,想想既然可以实现下
- 实现效果:实现代码import numpy as npfrom skimage import img_as_floatimport matp
- 前言本文参考了以下代码Windows系统环境下Python脚本实现全局“划词复制”功能from py
- 前言在写程序时,我们会经常碰到程序出现异常,这时候我们就不得不处理这些异常,以保证程序的健壮性。处理异常的版本有以下几种,你通常的做法是哪种
- Windows下的安装:下载地址:https://pypi.python.org/pypi/pyquery/#downloads下载后安装:
- 音频文件放入和.py文件同级的目录下import winsound # 导入此模块实现声音播放功能import time # 导入此模块,获
- 1. 程序背景之前做文件批量移动的时候不小心多加了一个pdf后缀,但问题不大,几行代码就可以搞定~2. 程序要求将以下目录中文件夹中的有问题
- 共同点: 1.它们都是python的核心类型,是python语言自身的一部分核心类型与非核心类型 多数核心类型可通过特定语法来生成其对象,比
- 分析摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者Samuel
- “/”应用程序中的服务器错误。用户 'jb51net' 登录失败。原因: 该帐户的密码必须更改。说明: 执行当前 Web 请
- vue2.x前置概念:路由钩子分类一共分3类, 7个钩子路由和组件的概念(方便理解钩子函数)路由和组件是2个概念, 可以粗犷的认为:路由是浏
- 前言这篇文章通过实例给大家讲解Python3中print带颜色输出的格式,下面话不多说了,来一起看看详细的介绍吧\033[显示方式;前景色;
- python 中sorted与sort有什么区别sort(cmp=None, key=None, reverse=False)sorted(
- MySQL select into临时表最近在编写sql语句时,遇到两次将数据放temp表,然后将两次的temp表进行inner join,
- 说明:这个例子,首先是把SPAN里的内容用display:none;干掉,就是不显示; 然后在A:HOVER时,再把SPAN里的内容disp