zoukankan      html  css  js  c++  java
  • selenium总结

    from selenium.webdriver import ActionChains
    from selenium.webdriver.chrome.options import Options

    一、启动配置

    self.chrome_options = Options()
    self.chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
    self.chrome_options.add_argument('--disable-gpu')
    self.chrome_options.add_argument('--no-sandbox')
    self.chrome_options.add_argument('--disable-dev-shm-usage')
    self.chrome_options.add_argument('--disable-blink-features=AutomationControlled')  # 也是反检测
    self.chrome_options.add_argument(
    'user-agent="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"')  # 设置ua
    self.chrome_options.add_argument("start-maximized") # 初始化就最大化
    self.chrome_options.add_argument('--user-data-dir=' + f'D:/pinduoduo/{userdata}')  # 自定义缓存保存位置,多用于登录
    # self.chrome_options.add_argument('--headless')  # 无头模式

    #设置代理 options.add_argument('proxy-server=' +'192.168.0.28:808')
    # 设置selenium对象
    self.browser = webdriver.Chrome(chrome_options=self.chrome_options)

    二、selenium浏览器防检测

    1、js文件地址:参考青南大佬  公众号:未闻的code

    链接:https://pan.baidu.com/s/1l2m21r3HsHNaN6K2A_IxUw
    提取码:gw2x
    复制这段内容后打开百度网盘手机App,操作更方便哦

    2、js = 

    '''() => {
    Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined
    })
    }
    '''

    三、selenium执行js语句

    self.browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": js代码
    })


    四、selenium处理cookie cookie为字典格式
    self.browser.delete_all_cookies()  # 删除原cookie
    cookies = {item.split('=')[0]: item.split('=')[1] for item in cookie.split(';')}
    print(cookies)
    for key, value in cookies.items():
    cookie_dict = {'domain': '.pinduoduo.com', 'name': key, 'value': value, "expires": '',
    'path': '/',
    'httpOnly': False,
    'HostOnly': False,
    'Secure': False
    }
    self.browser.add_cookie(cookie_dict)  # 新增cookie

    五、selenium轨迹滑动公式  (遇见最合适的一个 )

    def get_track(distance):
    '''
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v=v0+at
    ②s=v0t+(1/2)at²
    ③v²-v0²=2as

    :param distance: 需要移动的距离
    :return: 存放每0.2秒移动的距离
    '''
    # 初速度
    v = 5
    # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移
    t = 0.5
    # 位移/轨迹列表,列表内的一个元素代表0.2s的位移
    tracks = []
    # 当前的位移
    current = 0
    # 到达mid值开始减速
    mid = distance * 5 / 8

    distance += 10 # 先滑过一点,最后再反着滑动回来
    # a = random.randint(1,3)
    while current < distance:
    if current < mid:
    # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细
    a = random.randint(1, 3) # 加速运动
    else:
    a = -random.randint(2, 4) # 减速运动

    # 初速度
    v0 = v
    # 0.2秒时间内的位移
    s = v0 * t + 0.5 * a * (t ** 2)
    # 当前的位置
    current += s
    # 添加到轨迹列表
    tracks.append(round(s))

    # 速度已经达到v,该速度作为下次的初速度
    v = v0 + a * t

    # 反着滑动到大概准确位置
    for i in range(4):
    tracks.append(-random.randint(1, 3))
    # for i in range(4):
    # tracks.append(-random.randint(1,3))
    random.shuffle(tracks)
    return tracks
    六、selenium拖动鼠标滑动
    ActionChains(self.browser).click_and_hold(on_element=button).perform()
                webdriver.ActionChains(self.browser).move_by_offset(xoffset=0, yoffset=100).perform()
                time.sleep(0.15)
                for item in track: track为缺口距离
                    webdriver.ActionChains(self.browser).move_by_offset(xoffset=item, yoffset=random.randint(-2, 2)).perform()
                # 稳定一秒再松开
                time.sleep(1)
                webdriver.ActionChains(self.browser).release(button).perform()
                time.sleep(1)
                # 随机拿开鼠标
                webdriver.ActionChains(self.browser).move_by_offset(xoffset=random.randint(200, 300),
                                                                   yoffset=random.randint(200, 300)).perform()
                time.sleep(3)

    使用selenium切换frame

    frame是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是 driver.switch_to.frame()








  • 相关阅读:
    2020年面向对象程序设计寒假作业1_实践题
    2020年面向对象程序设计寒假作业1_问答题
    实验5:开源控制器实践——POX
    实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践
    实验2:Open vSwitch虚拟交换机实践
    第一次个人编程作业
    实验1:SDN拓扑实践
    第一次博客作业
    面向对象程序设计寒假作业3
  • 原文地址:https://www.cnblogs.com/itBlogToYpl/p/14574722.html
Copyright © 2011-2022 走看看