课堂记录:
- selenium剩余部分
Selenium选择器之Xpath语法:
Xpath语法查找元素:
driver.find_element_by_xpath(‘/...’) #/是从跟开始找 跟开始位置的第一个元素
driver.find_element_by_xpath(‘//...’) #//从根节点开始找任意一个节点
driver.find_elements_by_xpath(‘//...’) #//从根节点开始找任意一个节点的所有
driver.find_element_by_xpath(‘//div[@id=”images”]’) #查找id为images的节点
driver.find_elements_by_xpath(‘//a’).get_attribute(‘href’) #找到第一个a节点的href属性 get_attribute
- selenium万能登录破解
获取两个框的x距离
自动化测试 1
1 from selenium import webdriver 2 from selenium.webdriver import ActionChains 3 import time 4 5 driver = webdriver.Chrome() 6 driver.implicitly_wait(10) 7 driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') 8 9 try: 10 11 # driver.switch_to_frame('iframeResult') 12 # 切换到id为iframeResult的窗口内 13 driver.switch_to.frame('iframeResult') 14 15 # 源位置 16 draggable = driver.find_element_by_id('draggable') 17 18 # 目标位置 19 droppable = driver.find_element_by_id('droppable') 20 21 # 调用ActionChains,必须把驱动对象传进去 22 # 得到一个动作链对象,复制给一个变量 23 actions = ActionChains(driver) 24 25 # 方式一: 机器人 26 # 瞬间把源图片位置秒移到目标图片位置 27 # actions.drag_and_drop(draggable, droppable) # 编写一个行为 28 # actions.perform() # 执行编写好的行为 29 30 31 # 方式二: 模拟人的行为 32 source = draggable.location['x'] 33 target = droppable.location['x'] 34 print(source, target) 35 36 distance = target - source 37 print(distance) 38 39 # perform:每个动作都要调用perform执行 40 41 # 点击并摁住源图片 42 ActionChains(driver).click_and_hold(draggable).perform() 43 44 s = 0 45 while s < distance: 46 # 执行位移操作 47 ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform() 48 s += 2 49 50 # 释放动作链 51 ActionChains(driver).release().perform() 52 53 time.sleep(10) 54 55 56 finally: 57 driver.close()
- 破解登录(只能破解有cookie缓存的网站)
分析他的cookie 看哪串才是用户加密的
- 打开文件的查看,显示隐藏文件
- 找到谷歌 users data 删除default文件
- 重新打开浏览器 并登录百度账号 此时会创建一个新的dufault缓存文件
- 添加cookie
- 关闭谷歌浏览器后执行程序
每次通过selenium驱动的都是干净的浏览器
Default文件夹 包含缓存的文件夹
1 from selenium import webdriver 2 from selenium.webdriver import ChromeOptions 3 import time 4 r''' 5 步骤: 6 1、打开文件的查看,显示隐藏文件 7 2、找到C:\Users\administortra\AppData\Local\Google\Chrome\User Data 8 删除Default文件 9 3、重新打开浏览器,并登陆百度账号 10 - 此时会创建一个新的Default缓存文件 11 4、添加cookies 12 5、关闭谷歌浏览器后执行程序 13 ''' 14 # 获取options对象,参数对象 15 options = ChromeOptions() 16 17 # 获取cookies保存路径 18 # 'C:\Users\administortra\AppData\Local\Google\Chrome\User Data' 19 profile_directory = r'--user-data-dir=C:\Users\administortra\AppData\Local\Google\Chrome\User Data' 20 21 # 添加用户信息目录 22 options.add_argument(profile_directory) 23 24 # 把参数加载到当前驱动中 chrome_options默认参数,用来接收options对象 25 driver = webdriver.Chrome(chrome_options=options) 26 27 try: 28 driver.implicitly_wait(10) 29 driver.get('https://www.baidu.com/') 30 ''' 31 BDUSS:***** 32 ''' 33 # 添加用户cookies信息 34 # name、value必须小写 35 driver.add_cookie({"name": "BDUSS", "value": "用户session字符串"}) 36 37 # 刷新操作 38 driver.refresh() 39 40 time.sleep(10) 41 42 finally: 43 driver.close()
找cookie:
- Selenium爬取京东商品信息
获得Css标签
(‘.P-img a’)p-img下面的a标签
P-img空格 找到p-img下面所有的子标签
1 from selenium import webdriver 2 from selenium.webdriver.common.keys import Keys 3 import time 4 5 6 def get_good(driver): 7 try: 8 9 # 通过JS控制滚轮滑动获取所有商品信息 10 js_code = ''' 11 window.scrollTo(0,5000); 12 ''' 13 driver.execute_script(js_code) # 执行js代码 14 15 # 等待数据加载 16 time.sleep(2) 17 18 # 3、查找所有商品div 19 # good_div = driver.find_element_by_id('J_goodsList') 20 good_list = driver.find_elements_by_class_name('gl-item') 21 n = 1 22 for good in good_list: 23 # 根据属性选择器查找 24 # 商品链接 25 good_url = good.find_element_by_css_selector( 26 '.p-img a').get_attribute('href') 27 28 # 商品名称 29 good_name = good.find_element_by_css_selector( 30 '.p-name em').text.replace("\n", "--") 31 32 # 商品价格 33 good_price = good.find_element_by_class_name( 34 'p-price').text.replace("\n", ":") 35 36 # 评价人数 37 good_commit = good.find_element_by_class_name( 38 'p-commit').text.replace("\n", " ") 39 40 good_content = f''' 41 商品链接: {good_url} 42 商品名称: {good_name} 43 商品价格: {good_price} 44 评价人数: {good_commit} 45 \n 46 ''' 47 print(good_content) 48 with open('jd.txt', 'a', encoding='utf-8') as f: 49 f.write(good_content) 50 51 next_tag = driver.find_element_by_class_name('pn-next') 52 next_tag.click() 53 54 time.sleep(2) 55 56 # 递归调用函数 57 get_good(driver) 58 59 time.sleep(10) 60 61 finally: 62 driver.close() 63 64 65 if __name__ == '__main__': 66 67 good_name = input('请输入爬取商品信息:').strip() 68 69 driver = webdriver.Chrome() 70 driver.implicitly_wait(10) 71 # 1、往京东主页发送请求 72 driver.get('https://www.jd.com/') 73 74 # 2、输入商品名称,并回车搜索 75 input_tag = driver.find_element_by_id('key') 76 input_tag.send_keys(good_name) 77 input_tag.send_keys(Keys.ENTER) 78 time.sleep(2) 79 80 get_good(driver)
京东通过js生成数据 将一页加载完再
在查找商品之前
函数递归调用 获取下一页
滚轮自动化滑动 跳转下一页 爬取
- 破解极验滑动验证(预习)
滑动验证的逻辑
找到两个方块的位置 对两个位置进行比较 获取距离
两个方块的像素点的比较
- 输入用户名与密码,并点击登录
- 弹出滑动验证,获取有缺口与完整的图片
- 通过像素点进行对比,获取滑动位移距离
- 模拟人的行为轨
- 开始滑动