• Day-6 python


    昨日作业:
      自动登录抽屉新热榜
     1 from selenium import webdriver
     2 import time
     3 
     4 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
     5 
     6 # 把窗口转成全屏
     7 driver.maximize_window()
     8 
     9 try:
    10     driver.get('http://dig.chouti.com/')
    11     driver.implicitly_wait(10)
    12 
    13     # 1、点击登录
    14     login_btn = driver.find_element_by_id('login_btn')
    15     login_btn.click()
    16     time.sleep(2)
    17 
    18     # 2、输入用户名
    19     phone = driver.find_element_by_class_name('login-phone')
    20     phone.send_keys('xxx')
    21 
    22     # 3、输入密码
    23     pwd = driver.find_element_by_class_name('pwd-password-input')
    24     pwd.send_keys('yyy')
    25 
    26     # 4、点击登录
    27     login_submit = driver.find_element_by_class_name('btn-large')
    28     login_submit.click()
    29 
    30     time.sleep(20)
    31 
    32 # 捕获异常并打印
    33 except Exception as e:
    34     print(e)
    35 
    36 finally:
    37     driver.close()
     
    今日内容:
    注意:selenium驱动的浏览器是干净的,没有任何缓存的
    1、selenium剩余用法
    2、selenium万能登录破解
    3、selenium爬取京东商品信息
    4、破解极验滑动验证码

    一、
    selenium剩余用法
     1 from selenium import webdriver
     2 
     3 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
     4 
     5 try:
     6     # 隐式等待:写在get请求前
     7     driver.implicitly_wait(5)
     8 
     9     driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')
    10 
    11 
    12     # 显式等待:写在get请求后
    13     # wait.until(...)
    14 
    15     # 根据xpath语法查找元素
    16     # / 从根开始找第一个
    17     html = driver.find_element_by_xpath('/html')
    18     html = driver.find_element_by_xpath('/head') # 报错
    19     print(html.tag_name)
    20 
    21     # //从根节点开始斩任意一个节点
    22     div = driver.find_element_by_xpath('//div')
    23     print(div.tag_name)
    24 
    25     # @
    26     # 查找id为images的div节点
    27     div = driver.find_element_by_xpath('//div[@id="images"]')
    28     print(div.tag_name)
    29     print(div.text)
    30 
    31     # 找到第一个a节点
    32     a = driver.find_element_by_xpath('//a')
    33     print(a.tag_name)
    34 
    35     # 找到所有a节点
    36     a_s = driver.find_elements_by_xpath('//a')
    37     print(a_s)
    38 
    39     # 找到第一个a节点的href属性
    40     # a = driver.find_element_by_xpath('//a/href')
    41     a = driver.find_element_by_xpath('//a').get_attribute('href')  # get_attribute:获取节点中某个属性
    42     print(a)
    43 
    44 finally:
    45     driver.close()

    二、元素交互操作

      1 from selenium import webdriver
      2 from selenium.webdriver.common.keys import Keys
      3 import time
      4 
      5 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
      6 
      7 '''
      8 点击、清除操作
      9 '''
     10 
     11 try:
     12     driver.implicitly_wait(10)
     13     # 往jd发送请求
     14     driver.get('https://www.jd.com')
     15     # 找到输入框输入围城
     16     input_tag = driver.find_element_by_id('key')
     17     input_tag.send_keys('围城')
     18     # 键盘回车
     19     input_tag.send_keys(Keys.ENTER)
     20     time.sleep(2)
     21     # 找到输入框输入墨菲定律
     22     input_tag = driver.find_element_by_id('key')
     23     input_tag.clear()
     24     input_tag.send_keys('墨菲定律')
     25     # 找到搜索按钮点击搜索
     26     button = driver.find_element_by_class_name('button')
     27     button.click()
     28     time.sleep(10)
     29 
     30 finally:
     31     driver.close()
     32 
     33 
     34 
     35 '''
     36 获取cookies
     37 '''
     38 from selenium import webdriver
     39 import time
     40 
     41 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
     42 
     43 try:
     44     driver.implicitly_wait(10)
     45     driver.get('https://www.zhihu.com/explore')
     46     print(driver.get_cookies())
     47     # driver.add_cookie({'Name':'xxx','Value':'yyy'})
     48     # print( driver.get_cookies())
     49 
     50 finally:
     51     driver.close()
     52 
     53 
     54 
     55 '''
     56 选项卡
     57 '''
     58 选项卡管理:切换选项卡,有js的方式windows.open,有windows快捷键:
     59 ctrl+t等,最通用的就是js的方式
     60 import time
     61 from selenium import webdriver
     62 
     63 browser= webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
     64 try:
     65     browser.get('https://www.baidu.com')
     66 
     67     # execute_script:执行js代码
     68     # 弹窗操作
     69     # browser.execute_script('alert("tank")')
     70     # 新建浏览器窗口
     71     browser.execute_script('window.open()')
     72     time.sleep(3)
     73 
     74     print(browser.window_handles) #获取所有的选项卡
     75     # 选择第二个窗口
     76     # 新:
     77     browser.switch_to.window(browser.window_handles[1])
     78     # 旧:
     79     # browser.switch_to_window(browser.window_handles[1])
     80 
     81     # 第二个窗口往淘宝发送请求
     82     browser.get('https://www.taobao.com')
     83     time.sleep(5)
     84 
     85     # 切换到第一个窗口
     86     browser.switch_to_window(browser.window_handles[0])
     87     browser.get('https://www.sina.com.cn')
     88 
     89     time.sleep(10)
     90 finally:
     91     browser.close()
     92 
     93 
     94 '''
     95 ActionChanins动作链
     96 '''
     97 from selenium import webdriver
     98 from selenium.webdriver import ActionChains
     99 import time
    100 
    101 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
    102 driver.implicitly_wait(10)
    103 driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
    104 
    105 try:
    106 
    107     # driver.switch_to_frame('iframeResult')
    108     # 切换到id为iframeResult的窗口内
    109     driver.switch_to.frame('iframeResult')
    110 
    111     # 源位置
    112     draggable = driver.find_element_by_id('draggable')
    113 
    114     # 目标位置
    115     droppable = driver.find_element_by_id('droppable')
    116 
    117     # 调用ActionChains,必须把驱动对象传进去
    118     # 得到一个动作链对象,复制给一个变量
    119     actions = ActionChains(driver)
    120 
    121     # 方式一:机器人
    122     # 瞬间把源图片位置秒移到目标图片位置
    123     # actions.drag_and_drop(draggable,  droppable)  # 编写一个行为
    124     # actions.perform()  # 执行编写好的行为
    125 
    126 
    127     # 方式二:模拟人的行为
    128     source = draggable.location['x']
    129     target = droppable.location['x']
    130     print(source,target)
    131 
    132     distance = target - source
    133     print(distance)
    134 
    135     # perform:每个动作都要调用perform执行
    136 
    137     # 点击并摁住源图片
    138     ActionChains(driver).click_and_hold(draggable).perform()
    139 
    140     s = 0
    141     while s < distance:
    142         ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()
    143         s += 2
    144 
    145     # 释放动作链
    146     ActionChains(driver).release().perform()
    147 
    148     time.sleep(10)
    149 
    150 finally:
    151     driver.close()
    152 
    153 
    154 '''
    155 前进、后退
    156 '''
    157 from selenium import webdriver
    158 import time
    159 
    160 driver = webdriver.Chrome(r'D:Pythonchromedriver_win32chromedriver')
    161 
    162 
    163 try:
    164     driver.implicitly_wait(10)
    165     driver.get('https://www.jd.com/')
    166     driver.get('https://www.baidu.com/')
    167     driver.get('https://www.cnblogs.com/')
    168 
    169     time.sleep(2)
    170 
    171     # 回退操作
    172     driver.back()
    173     time.sleep(1)
    174     # 前进操作
    175     driver.forward()
    176     time.sleep(1)
    177     driver.back()
    178     time.sleep(10)
    179 
    180 finally:
    181     driver.close()

    三、破解登录

     1 from selenium import webdriver
     2 from selenium.webdriver import ChromeOptions
     3 import time
     4 
     5 r'''
     6 步骤:
     7     1、打开文件的查看,显示隐藏文件
     8     2、找到用户数据所在文件夹绝对路径
     9        删除Default
    10     3、重新打开浏览器,并登陆百度账号
    11         -此时会创建一个新的default缓存文件
    12 '''
    13 
    14 # 获取options对象
    15 options = ChromeOptions()
    16 
    17 # 获取cookies保存路径
    18 profile_directory = r'--user--data--dir=***'
    19 
    20 # 添加用户信息目录
    21 options.add_argument(profile_directory)
    22 
    23 # 把参数加载到当前驱动中
    24 driver = webdriver.Chrome(chrome_options=options)
    25 
    26 try:
    27     driver.implicitly_wait(10)
    28     driver.get('https://www.baidu.com/')
    29
    32     # 添加用户cookies信息
    33     # name、value必须小写
    34     driver.add_cookie({"name":"BDUSS", "value":"***"})
    35 
    36     # 刷新操作
    37     driver.refresh()
    38 
    39     time.sleep(10)
    40 
    41 finally:
    42     driver.close()

    四、selenium爬取京东商品信息

    
    
     1 '''
     2 爬取京东商品信息:
     3     请求url:
     4         https://www.jd.com/
     5     提取商品信息:
     6         1、商品详情页
     7         2、商品名称
     8         3、商品价格
     9         4、评价人数
    10         5、商品商家
    11 '''
    12 from selenium import  webdriver
    13 from selenium.webdriver.common.keys import Keys
    14 import time
    15 
    16 
    17 
    18 def get_good(driver):
    19     try:
    20 
    21         #  通过JS控制滚轮滑动获取所有商品信息
    22         js_code = '''
    23             window.scrollTo(0,5000);
    24         '''
    25         driver.execute_script(js_code)  # 执行js代码
    26 
    27         # 等待数据加载
    28         time.sleep(2)
    29 
    30         good_list = driver.find_elements_by_class_name('gl-item')
    31         n = 1
    32         for good in good_list:
    33             # 根据属性选择器查找
    34 
    35             # 商品链接
    36             good_url = good.find_element_by_css_selector('.p-img a').get_attribute('href')
    37             # print(good,n)
    38 
    39             # 商品名称
    40             good_name = good.find_element_by_css_selector('.p-name em').text.replace("
    ","--")
    41 
    42             # 商品价格
    43             good_price = good.find_element_by_class_name('p-price').text.replace("
    ",":")
    44 
    45             # 评价人数
    46             good_commit = good.find_element_by_class_name('p-commit').text.replace("
    "," ")
    47 
    48             # 商品商家
    49             good_from = good.find_element_by_class_name('p-shop').text.replace("
    "," ")
    50 
    51             # driver.find_element_by_xpath('//div/div[]')
    52 
    53             good_content = f'''
    54                 商品链接:{good_url}
    55                 商品名称:{good_name}
    56                 商品价格:{good_price}
    57                 评价人数:{good_commit}
    58                 商品商家:{good_from}
    59                 
    
    60                 '''
    61             print(good_content)
    62             with open('jd.txt','a',encoding='utf-8') as f:
    63                 f.write(good_content)
    64 
    65         next_tag = driver.find_element_by_class_name('pn-next')
    66         next_tag.click()
    67 
    68         time.sleep(2)
    69 
    70         # 递归调用函数
    71         get_good(driver)
    72 
    73         time.sleep(10)
    74 
    75     finally:
    76         driver.close()
    77 if __name__ == '__main__':
    78 
    79     good_name = input('请输入爬取商品信息:').strip()
    80     driver = webdriver.Chrome()
    81     driver.implicitly_wait(10)
    82 
    83     # 1、往京东主页发送请求
    84     driver.get('https://www.jd.com/')
    85 
    86     # 输入商品名称,并回车搜索
    87     input_tag = driver.find_element_by_id('key')
    88     input_tag.send_keys(good_name)
    89     input_tag.send_keys(Keys.ENTER)
    90     time.sleep(2)
    91 
    92     get_good(driver)
    
    

    五、破解极验滑动验证

     1 '''
     2 破解极验滑动验证
     3 博客园登录url:
     4 
     5 1、输入用户名与密码,并点击登录
     6 2、弹出滑动验证,获取有缺口与完整的图片
     7 3、通过像素点进行比对,获取滑动位移距离
     8 4、模拟人的行为轨迹
     9 5、开始滑动
    10 '''

    破解登录博客园

     1 from selenium import webdriver
     2 from selenium.webdriver import ChromeOptions
     3 import time
     4 
     5 r'''
     6 步骤:
     7     1、打开文件的查看,显示隐藏文件
     8     2、找到用户数据所在文件绝对路径
     9        删除Default
    10     3、重新打开浏览器,并登陆百度账号
    11         -此时会创建一个新的default缓存文件
    12 '''
    13 
    14 # 获取options对象
    15 options = ChromeOptions()
    16 
    17 # 获取cookies保存路径
    18 profile_directory = r'***'
    19 
    20 # 添加用户信息目录
    21 options.add_argument(profile_directory)
    22 
    23 # 把参数加载到当前驱动中
    24 driver = webdriver.Chrome(chrome_options=options)
    25 
    26 try:
    27     driver.implicitly_wait(10)
    28     driver.get('https://home.cnblogs.com/')
    29 
    30     # 添加用户cookies信息
    31     # name、value必须小写
    32     driver.add_cookie({"name":".Cnblogs.AspNetCore.Cookies", "value":"***"})
    33 
    34     # 刷新操作
    35     driver.refresh()
    36 
    37     time.sleep(10)
    38 
    39 finally:
    40     driver.close()
    41 
    42 
    43
     


  • 相关阅读:
    python之生成器
    Python 类(一)
    Python OOP(面向对象编程)
    python 静态方法、类方法(二)
    记一个有想法没能力实现的产品形态——实时公交
    ubuntu12.04离线安装libjpeg62-dev
    linux内核container_of宏定义分析
    signal函数理解或者void (*signal(int signum,void(*handler)(int)))(int)理解
    HttpServlet cannot be resolved to a type解决方法
    ubuntu12.04不能记住上次编辑位置的解决方案
  • 原文地址:https://www.cnblogs.com/shendongnian/p/11048140.html
Copyright © 2020-2023  润新知