昨日作业:
自动登录抽屉新热榜
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