LettersfromSuperz

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

课堂记录:

  • 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”]’)    #查找idimages的节点

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 看哪串才是用户加密的

  1. 打开文件的查看,显示隐藏文件
  2. 找到谷歌 users data 删除default文件
  3. 重新打开浏览器 并登录百度账号 此时会创建一个新的dufault缓存文件
  4. 添加cookie
  5. 关闭谷歌浏览器后执行程序

每次通过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)
Selenium爬取京东商品信息

京东通过js生成数据 将一页加载完再

在查找商品之前

函数递归调用 获取下一页

滚轮自动化滑动 跳转下一页 爬取

 

  • 破解极验滑动验证(预习)

滑动验证的逻辑

找到两个方块的位置 对两个位置进行比较 获取距离

两个方块的像素点的比较

 

  1.  输入用户名与密码,并点击登录
  2. 弹出滑动验证,获取有缺口与完整的图片
  3. 通过像素点进行对比,获取滑动位移距离
  4. 模拟人的行为轨
  5. 开始滑动

 

posted on 2019-06-19 11:22  LettersfromSuperz  阅读(122)  评论(0编辑  收藏  举报