如果想操作固定的chrome去github上下个软件,叫my-chorme,即可打包一个免安装版本的chorme
点击链接,即可跳转到github下载页,如果没有小火箭去github,请留言邮箱,我会发送过去安装包
my-chrome下载地址
自己写的便捷操作selenium的库
import time
import random
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
class seleniumClass():
def __init__(self, is_Vis=True, binary_location=None, executable_path=None, waitTime=10):
self.option = webdriver.ChromeOptions()
self.option.add_argument(
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36')
if is_Vis == False:
# 指定浏览器在无头模式下运行,即在没有可见窗口的情况下运行,可用于在后台执行测试或爬虫任务。
self.option.add_argument("--headless")
# 禁用沙箱模式,可以避免一些权限相关的问题。
self.option.add_argument('--no-sandbox')
# 禁用 GPU 加速,可以减少资源消耗。
self.option.add_argument('--disable-gpu')
# 禁用/dev/shm的使用,可以减少内存消耗。
self.option.add_argument('--disable-dev-shm-usage')
# 排除启用自动化的选项,以避免被检测为自动化程序。
self.option.add_experimental_option('excludeSwitches', ['enable-automation'])
# 禁用自动化扩展,以避免被检测为自动化程序。
self.option.add_experimental_option('useAutomationExtension', False)
# 禁用所有 Blink 引擎的特性。
self.option.add_argument('--disable-blink-features')
# 禁用自动化控制的 Blink 引擎特性。
self.option.add_argument('--disable-blink-features=AutomationControlled')
# 如果定义了Chrome地址,那么需要指定路径
if binary_location != None:
self.option.binary_location = binary_location
# 如果定义了chromedriver地址,那么需要指定路径
if executable_path != None:
self.driver = webdriver.Chrome(executable_path=executable_path,chrome_options=self.option)
else:
self.driver = webdriver.Chrome(chrome_options=self.option)
self.driver.implicitly_wait(waitTime)
# 打开Url
def get_url(self, url):
self.driver.get(url)
return self
# 选取ID元素
def find_element_by_id(self, id):
return self.driver.find_element(By.ID, id)
# 选取Class元素
def find_element_by_class_name(self, class_name):
return self.driver.find_element(By.CLASS_NAME, class_name)
# 使用xpath选取元素
def find_element_by_xpath(self, xpath):
return self.driver.find_element(By.XPATH, xpath)
# 拖动,第一个是元素选择,第二个是拖动距离
def clickHold(self, slider_element, distrack):
action = ActionChains(self.driver)
# 模拟点击并稍作停留
action.click_and_hold(slider_element)
time.sleep(random.uniform(0.1, 0.3)) # 随机停留0.1到0.3秒
# 开始拖动滑块
initial_location = slider_element.location_once_scrolled_into_view
total_move = distrack + random.uniform(-5, 5) # 添加一定的随机偏移量
action.move_by_offset(total_move, 0)
# 在接近目标位置时加入微调动作
near_target_threshold = 20 # 设置一个阈值,在这个范围内进行微调
if abs(total_move) < near_target_threshold:
micro_adjust = random.uniform(-3, 3)
action.move_by_offset(micro_adjust, 0)
# 松开鼠标按键,完成拖动动作
action.release()
# 执行这一系列的动作
action.perform()
# 获取字符串cookies
def get_string_cookies(self):
arr = self.driver.get_cookies()
cookieArr = []
for item in arr:
cookieArr.append(item['name']+'='+item['value'])
return ";".join(cookieArr)
# 设置cookies
def add_cookies(self, cookies):
cookieArr = cookies.split(";")
addCookies = []
for item in cookieArr:
self.driver.add_cookie({'name':item.split("=")[0].strip(),'value':item.split("=")[1].strip()})
return True
def get_resources_url(self, desc):
return self.driver.execute_script("return window.performance.getEntriesByType('resource').filter(entry => entry.initiatorType === 'xmlhttprequest' && entry.name.indexOf('"+str(desc)+"') > -1);")[-1]
# 关闭浏览器
def close_window(self):
self.driver.close()