selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件

安装方法:

  •   pip install selenium
  •   下载对应浏览器的驱动程序
  •   谷歌浏览器驱动下载地址:

https://chromedriver.storage.googleapis.com/index.html

https://npm.taobao.org/

  •   根据浏览器版本选择对应的驱动版本(网上查)

代码流程:

  • 导入模块:from selenium import webdriver
  • 实例化一个浏览器对象:webdriver.Chrome(executable_path='./chromedriver.exe') ,参数为浏览器驱动路径;
  • 写上要访问的网址:bro.get("https://xueqiu.com/")

浏览器相关操作:

  执行js实现滚轮向下

  移动到页面最底部(如果是动态加载的数据及第一次加载完成的地方):

    js = "window.scrollTo(0,document.body.scrollHeight)"

  定位标签,向标签里写参数 

tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民币')

截屏

  bro.save_screenshot('1.png')

获取页面数据

获取动态加载的数据:bro.page_source 

  基于xpath获取标签:a_tag = bro.find_element_by_xpath("xpath表达式")

  点击事件:a_tag.click()    单击鼠标左键一下

网页的前进和后退

bro.back()   后退

bro.forward()   前进

网页前进后退代码

谷歌无头浏览器

如不想感知到浏览器操作,可让浏览器在后台操作 

#谷歌无头浏览器
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options)
bro.get('https://www.baidu.com')
sleep(2)
bro.save_screenshot('1.png')
#标签定位
tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民币')
sleep(2) btn = bro.find_element_by_id('su')
btn.click()
sleep(2) print(bro.page_source)
bro.quit()

谷歌无头浏览器代码

动作链

如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位

#动作链
from selenium import webdriver
from time import sleep
from selenium.webdriver import ChromeOptions
from selenium.webdriver import ActionChains option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro.get(url=url)
#如果定位的标签存在于iframe标签之中,则必须经过switch_to操作在进行标签定位
bro.switch_to.frame('iframeResult')
source_tag = bro.find_element_by_id('draggable')
taget_tag = bro.find_element_by_id('droppable')
#创建一个动作连的对象
action = ActionChains(bro)
action.drag_and_drop(source_tag,taget_tag)
action.perform()
sleep(3)
# bro.quit()

动作链代码展示

  

  

  

最新文章

  1. CodeForces - 261B Maxim and Restaurant
  2. JQuery中$.each 和$(selector).each()的区别详解
  3. 微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能
  4. yii学习笔记
  5. localStorage兼容ie6/7 用addBehavior 实现
  6. suse linux修改hostname
  7. windows API 实现截图
  8. python smtplib.SMTPDataError: (554
  9. 济南清北学堂游记 Day 7.
  10. C语言文件 "w+"与"wb+"区别
  11. Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
  12. C#中使用JavaScriptSerializer类实现序列化与反序列化
  13. Sublime Text3 调色板 ColorPicker插件安装及快捷键
  14. robotframework添加自定义的API,在Lib\site-packages路径下放入写好的py文件。
  15. html5的理解
  16. capwap学习笔记——初识capwap(三)
  17. Variational Approximate Inference
  18. .Net在线编辑器:KindEditor及CkEditor+CkFinder配置说明
  19. bind9配置转发服务
  20. 去除Xcode6创建工程时自带的storyboard

热门文章

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计
  2. vue组件命名和传值 and 父子组件传值
  3. ssm整合用到的依赖jar包(不充足)
  4. 改进后的socket轮子,欢迎挑战
  5. Vue 子组件与子组件之间传值
  6. CentOS8 使用 aliyun 阿里云 镜像站点的方法
  7. linux下正确卸载rpm包
  8. SpreadJS V13.0发布,聚焦表单设计与数据交互,让您的工作效率突飞猛进!
  9. The import javax.websocket cannot be resolved的解决问题
  10. VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法