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
 


原文地址:https://www.cnblogs.com/shendongnian/p/11048140.html