selenium操作

  点击、清除操作

  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4.  
  5. driver = webdriver.Chrome( )
  6.  
  7. try:
  8. driver.implicitly_wait(10)
  9. #1、往jd发送请求
  10. driver.get('https://www.jd.com/')
  11. #找到输入框输入围城
  12. input_tag = driver.find_element_by_id('key')
  13. input_tag.send_keys('围城')
  14. #键盘回车
  15. input_tag.send_keys(Keys.ENTER)
  16. time.sleep(2)
  17. #找到输入框输入墨菲定律
  18. input_tag = driver.find_element_by_id('key')
  19. input_tag.clear()
  20. input_tag.send_keys('墨菲定律')
  21. #找到搜索按钮点击搜索
  22. button = driver.find_element_by_class_name('button')
  23. button.click()
  24. time.sleep(10)
  25. finally:
  26. driver.close()

  获取cookies

  1. from selenium import webdriver
  2. import time
  3. driver = webdriver.Chrome()
  4. try:
  5. driver.implicitly_wait(10)
  6. driver.get('https://www.zhihu.com/explore')
  7. print(driver.get_cookies())
  8. time.sleep(10)
  9. finally:
  10. driver.close()

  选项卡管理:切换选项卡,有js的方式windows.open,有windows快捷键:

  1. import time
  2. from selenium import webdriver
  3. #
  4. browser = webdriver.Chrome()
  5. try:
  6. browser.get('https://www.baidu.com')
  7. #
  8. execute_script: 执行javascrpit代码
  9. #弹窗操作
  10. browser.execute_script('alert("tank")')
  11. #新建浏览器窗口
  12. browser.execute_script(
  13. '''
  14. window.open();
  15. '''
  16. )
  17. time.sleep(1)
  18. print(browser.window_handles) 获取所有的选项卡
  19. #切换到第二个窗口
  20. #新:
  21. browser.switch_to.window(browser.window_handles[1])
  22. #旧:
  23. #browser.switch_to_window(browser.window_handles[1])
  24. # 第二个窗口往淘宝发送请求
  25. browser.get('https://www.taobao.com')
  26. time.sleep(5)
  27.  
  28. #切换到第一个窗口
  29. browser.switch_to_window(browser.window_handles[0])
  30. browser.get('https://www.sina.com.cn')
  31.  
  32. time.sleep(10)
  33. finally:
  34. browser.close()

  ActionChangs动作链

  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. try:
  9. driver.switch_to_frame('iframeResult')
  10. #切换到id为iframeResult的窗口内
  11. driver.switch_to.frame('iframeResult')
  12. # 源位置
  13. draggable = driver.find_element_by_id('draggable')
  14. #目标位置
  15. droppable = driver.find_element_by_id('droppable')
  16. #调用ActionChains,必须把驱动对象传进去
  17. #得到一个动作链对象,复制给一个变量
  18. actions = ActionChains(driver)
  19. #方式一: 机器人
  20. #瞬间把源图片位置秒移到目标图片位置
  21. #actions.drag_and_drop(draggable, droppable) 编写一个行为
  22. #actions.perform() 执行编写好的行为
  23. #方式二: 模拟人的行为
  24. source = draggable.location['x']
  25. target = droppable.location['x']
  26. print(source, target)
  27. distance = target - source
  28. print(distance)
  29. #perform:每个动作都要调用perform执行
  30. #点击并摁住源图片
  31. ActionChains(driver).click_and_hold(draggable).perform()
  32. s = 0
  33. while s < distance:
  34. #执行位移操作
  35. ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()
  36. s += 2
  37. # 释放动作链
  38. ActionChains(driver).release().perform()
  39.  
  40. time.sleep(10)
  41.  
  42. finally:
  43. driver.close()

  前进、后退

  1. from selenium import webdriver
  2. import time
  3. driver = webdriver.Chrome()
  4. try:
  5. driver.implicitly_wait(10)
  6. driver.get('https://www.jd.com/')
  7. driver.get('https://www.baidu.com/')
  8. driver.get('https://www.cnblogs.com/')
  9. time.sleep(2)
  10. #回退操作
  11. driver.back()
  12. time.sleep(1)
  13. #前进操作
  14. driver.forward()
  15. time.sleep(1)
  16. driver.back()
  17. time.sleep(10)
  18. finally:
  19. driver.close()

破解登录

  步骤:
  1、打开文件的查看,显示隐藏文件
  2、找到C:\Users\administortra\AppData\Local\Google\Chrome\User Data
  删除Default文件
  3、重新打开浏览器,并登陆百度账号
  - 此时会创建一个新的Default缓存文件
  4、添加cookies
  5、关闭谷歌浏览器后执行程序

  1. # 获取options对象,参数对象
  2. options = ChromeOptions()
  3.  
  4. # 获取cookies保存路径
  5. # 'C:\Users\administortra\AppData\Local\Google\Chrome\User Data'
  6. profile_directory = r'--user-data-dir=C:\Users\administortra\AppData\Local\Google\Chrome\User Data'
  7.  
  8. # 添加用户信息目录
  9. options.add_argument(profile_directory)
  10. from selenium import webdriver
  11. from selenium.webdriver import ChromeOptions
  12. import time
  13. # 把参数加载到当前驱动中 chrome_options默认参数,用来接收options对象
  14. driver = webdriver.Chrome(chrome_options=options)
  15. try:
  16. driver.implicitly_wait(10)
  17. driver.get('https://www.baidu.com/')
  18. '''
  19. BDUSS:*****
  20. '''
  21. # 添加用户cookies信息
  22. # name、value必须小写
  23. driver.add_cookie({"name": "BDUSS", "value": "用户session字符串"})
  24. # 刷新操作
  25. driver.refresh()
  26. time.sleep(10)
  27. finally:
  28. driver.close()

爬取京东商品信息

  爬取京东商品信息:

    请求url:
      https://www.jd.com/
  提取商品信息:
    1.商品详情页
    2.商品名称
    3.商品价格
    4.评价人数

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

破解滑动验证

  破解极验滑动验证  
    博客园登录url:
     https://account.cnblogs.com/signinreturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F
    1、输入用户名与密码,并点击登录
    2、弹出滑动验证,获取有缺口与完整的图片
    3、通过像素点进行比对,获取滑动位移距离
    4、模拟人的行为轨迹
    5、开始滑动

  1. from selenium import webdriver # 用来驱动浏览器的
  2. from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片
  3. import time
  4. from PIL import Image # pip3 install pillow
  5. import random
  6.  
  7. option = webdriver.ChromeOptions()
  8. option.add_argument('disable-infobars')
  9.  
  10. driver = webdriver.Chrome(chrome_options=option)
  11.  
  12. def get_snap(driver):
  13. # selenium自带的截图网页全屏图片
  14. driver.save_screenshot('snap.png')
  15.  
  16. img = driver.find_element_by_class_name('geetest_canvas_img')
  17.  
  18. left = img.location['x']
  19.  
  20. upper = img.location['y']
  21.  
  22. right = left + img.size['width']
  23. lower = upper + img.size['height']
  24.  
  25. # print(left, upper, right, lower)
  26. img_obj = Image.open('snap.png')
  27.  
  28. # 对屏幕进行截取,获取滑动验证图片
  29. image = img_obj.crop((left, upper, right, lower))
  30.  
  31. return image
  32.  
  33. def get_image1(driver):
  34. time.sleep(0.2)
  35. js_code = '''
  36. var x = document.getElementsByClassName('geetest_canvas_fullbg')[0].style.display="block";
  37. console.log(x)
  38. '''
  39.  
  40. time.sleep(1)
  41. driver.execute_script(js_code)
  42.  
  43. # 截取图片
  44. img_obj = get_snap(driver)
  45.  
  46. return img_obj
  47.  
  48. def get_image2(driver):
  49. time.sleep(0.2)
  50.  
  51. js_code = '''
  52. var x = document.getElementsByClassName('geetest_canvas_fullbg')[0].style.display="none";
  53. console.log(x)
  54. '''
  55.  
  56. driver.execute_script(js_code)
  57.  
  58. time.sleep(1)
  59.  
  60. # 截取图片
  61. img_obj = get_snap(driver)
  62.  
  63. return img_obj
  64.  
  65. def get_distance(image1, image2):
  66. # 初始值
  67. start = 60
  68.  
  69. # 滑块色差
  70. color_num = 60
  71.  
  72. for x in range(start, image1.size[0]):
  73. for y in range(image1.size[1]):
  74.  
  75. rgb1 = image1.load()[x, y]
  76.  
  77. rgb2 = image2.load()[x, y]
  78.  
  79. r = abs(rgb1[0] - rgb2[0])
  80. g = abs(rgb1[1] - rgb2[1])
  81. b = abs(rgb1[2] - rgb2[2])
  82.  
  83. if not (r < color_num and g < color_num and b < color_num):
  84. return x - 7
  85.  
  86. def get_stacks(distance):
  87. distance += 20
  88.  
  89. '''
  90. 匀加速\减速运行
  91. v = v0 + a * t
  92.  
  93. 位移:
  94. s = v * t + 0.5 * a * (t**2)
  95. '''
  96.  
  97. # 初速度
  98. v0 = 0
  99.  
  100. # 加减速度列表
  101. a_list = [3, 4, 5]
  102.  
  103. # 时间
  104. t = 0.2
  105.  
  106. # 初始位置
  107. s = 0
  108.  
  109. # 向前滑动轨迹
  110. forward_stacks = []
  111.  
  112. mid = distance * 3 / 5
  113.  
  114. while s < distance:
  115. if s < mid:
  116. a = a_list[random.randint(0, 2)]
  117.  
  118. else:
  119. a = -a_list[random.randint(0, 2)]
  120.  
  121. v = v0
  122.  
  123. stack = v * t + 0.5 * a * (t ** 2)
  124.  
  125. # 每次拿到的位移
  126. stack = round(stack)
  127.  
  128. s += stack
  129.  
  130. v0 = v + a * t
  131.  
  132. forward_stacks.append(stack)
  133.  
  134. back_stacks = [-1, -1, -2, -3, -2, -3, -2, -2, -3, -1]
  135.  
  136. return {'forward_stacks': forward_stacks, 'back_stacks': back_stacks}
  137.  
  138. def main():
  139. try:
  140.  
  141. driver.get('https://passport.cnblogs.com/user/signin')
  142. driver.implicitly_wait(5)
  143.  
  144. # 1.输入用户名与密码,点击登录
  145. username = driver.find_element_by_id('LoginName')
  146. password = driver.find_element_by_id('Password')
  147. login_button = driver.find_element_by_class_name('ladda-label')
  148. time.sleep(1)
  149. username.send_keys('_tank_')
  150. time.sleep(1)
  151. password.send_keys('k46709394.')
  152.  
  153. # 这里需要等待账号密码输入完毕后再点击登录按钮,否则的不弹框
  154. time.sleep(1)
  155. login_button.click()
  156. # time.sleep(3)
  157.  
  158. # 2.点击滑动验证按钮,获取图片
  159. geetest_button = driver.find_element_by_class_name('geetest_slider_button')
  160. geetest_button.click()
  161.  
  162. time.sleep(0.2)
  163.  
  164. # 3.针对完整的图片进行截取
  165. image1 = get_image1(driver)
  166.  
  167. # 4.针对有缺口的图片进行截取
  168. image2 = get_image2(driver)
  169.  
  170. # 5.对比两张图片,获取滑动距离
  171. distance = get_distance(image1, image2)
  172.  
  173. # 6.模拟人为滑动轨迹
  174. stacks = get_stacks(distance)
  175.  
  176. # 7.根据滑动轨迹进行滑动
  177. forward_stacks = stacks['forward_stacks']
  178. back_stacks = stacks['back_stacks']
  179.  
  180. slider_button = driver.find_element_by_class_name('geetest_slider_button')
  181. time.sleep(0.2)
  182.  
  183. ActionChains(driver).click_and_hold(slider_button).perform()
  184.  
  185. time.sleep(0.2)
  186. for forward_stack in forward_stacks:
  187. ActionChains(driver).move_by_offset(xoffset=forward_stack, yoffset=0).perform()
  188. time.sleep(0.1)
  189. for back_stack in back_stacks:
  190. ActionChains(driver).move_by_offset(xoffset=back_stack, yoffset=0).perform()
  191. time.sleep(0.1)
  192.  
  193. time.sleep(0.2)
  194.  
  195. ActionChains(driver).move_by_offset(xoffset=5, yoffset=0).perform()
  196. ActionChains(driver).move_by_offset(xoffset=-5, yoffset=0).perform()
  197.  
  198. ActionChains(driver).release().perform()
  199.  
  200. time.sleep(50)
  201.  
  202. finally:
  203. driver.close()
  204.  
  205. if __name__ == '__main__':
  206. main()

Python Learning Day6的更多相关文章

  1. python笔记 - day6

    python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...

  2. python learning Exception & Debug.py

    ''' 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返 ...

  3. Python Learning Paths

    Python Learning Paths Python Expert Python in Action Syntax Python objects Scalar types Operators St ...

  4. Python Learning

    这是自己之前整理的学习Python的资料,分享出来,希望能给别人一点帮助. Learning Plan Python是什么?- 对Python有基本的认识 版本区别 下载 安装 IDE 文件构造 Py ...

  5. python基础 Day6

    python Day6 id 可以获得python的内存地址 id的举例子 a=100 print(id(a)) #140712544153072 这里就是该对象的内存地址 is 判断的是比较内存地址 ...

  6. How to begin Python learning?

    如何开始Python语言学习? 1. 先了解它,Wiki百科:http://zh.wikipedia.org/zh-cn/Python 2. Python, Ruby等语言来自开源社区,社区的学法是V ...

  7. python 学习day6(面向对象)

    博客部分内容转自:http://www.cnblogs.com/wupeiqi/p/4493506.html 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法 ...

  8. Experience of Python Learning Week 1

    1.The founder of python is Guido van Rossum ,he created it on Christmas in 1989, smriti of ABC langu ...

  9. Python Learning: 03

    An inch is worth a pound of gold, an inch of gold is hard to buy an inch of time. Slice When the sca ...

随机推荐

  1. 复习hibernate

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...

  2. Windows 10长脸了!

    Windows 10一直毁誉参半,但是在微软的持续升级完善之下,同时随着时间的流逝,已经顺利成为全球第一大桌面操作系统,并开始逐渐甩开Windows 7,全球设备安装量已经达到约8亿部. 根据最新的S ...

  3. 新闻网大数据实时分析可视化系统项目——19、Spark Streaming实时数据分析

    1.Spark Streaming功能介绍 1)定义 Spark Streaming is an extension of the core Spark API that enables scalab ...

  4. LoNg wAy tO Go

    觉得一个电子工程师/硬件工程师应该有下面的能力: 1.模拟/数字电路的分析和设计.教科书上讲的都应该会,包括分离元件和运放的信号放大,滤波,波形产生,稳压电源,逻辑化简,基本触发器,基本计数器.寄存器 ...

  5. 007.CI4框架CodeIgniter, 加载自己的helper辅助类,调用自己helper中定义各种全局函数

    01. 我们在Helpers文件中创建一个Tx_helper.php的文件,里面就下一个函数 <?php //输出 function ShowMessage($AMsg) { echo &quo ...

  6. qq群的表设计探究

    2018年3月21日  课题组管理就如qq的群是一样的,课题组有课题组组长:qq群有群主:课题组有组员:qq群有群人员 对于一个课题组来说,组长可以对课题组进行修改,组员只能看得见,但是不能修改.所以 ...

  7. 配置gem5-gpu docker版

    1 安装docker:wget -qO- https://get.docker.com/ | sh,启动服务:sudo service docker start 2 把非root用户添加到docker ...

  8. POJ 3090 欧拉函数

    求一个平面内可见的点,其实就是坐标互质即可,很容易看出来或者证明 所以求对应的欧拉函数即可 #include <iostream> #include <cstdio> #inc ...

  9. Consul 简介及集群安装

    简介 Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册.服务发现和配置管理的功能. Consul的功能都很实用,其中包括:服务注册/发现.健康检查.Key/Value ...

  10. UVA 1601 双向BFS

    但是我们还不是很清楚每一次的状态怎么储存?我们可以用一个结构体,将每次的位置存起来,但是这个程序中用了一个更好的储存方法:我们知道最大的格数是16*16个,也就是256个,那么我们转换为二进制表示就是 ...