热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

seleniumpython简单入门

seleniumpython简单入门大家好,相信大家想把网页内容手动点击才能看的东西自动批量的获取下来,包括想保存知识内容,做资料搜集,计算价格等等,但苦于过往的方法都有点难,知

selenium python 简单入门

大家好,相信大家想把网页内容手动点击才能看的东西自动批量的获取下来,包括想保存知识内容,做资料搜集,计算价格等等,但苦于过往的方法都有点难,知道使用webkit核心的chrome ,firefox,edge等的浏览器的出现,在加上附带内置的自动化测试工具,让这些事情变的比较简单容易,隆重介绍(装作好像只有我知道一样),selenium !!!这个就是自动化测试工具,它不但可以获取页面元素,下载还可以模拟键盘,鼠标,点击,拖放等等

1.安装
假设大家都用chrome
首先我们要确定chrome的版本
emmm 打开浏览器看我觉得太低端,上代码:

import subprocess
cmd="(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo|select FileVersion"
completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True)
print(completed.stdout.decode().strip().splitlines()[2])

这个是在python 上运行powershell 语句去获取chrome语句
stdout 是 bytes 类型,所以我需要decode()
strip() 拔走一些空格,其实并没有
splitlines() 把它拆成多行文本
[2]第三行

好吧,我以为大家都不懂,所以我水了…

接着要装 chromedriver ,selenium需要指明不同浏览器对应的driver才可以使用
去这里下载对应chrome版本的 chromedriver,如果你使用开发版(金雀)的话就需要下载金雀版的chromedriver,至于firefox,edge,phantomjs都是一样,用法并无二致就不多说了

https://chromedriver.chromium.org/

如果学会了selenium甚至可以根据版本去这个网直接爬下来,嗯,我就是这么做的

在python 运行selenium打开chromedriver之前,是必须要增加参数的,那首先就开始第一条selenium的实例

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
import reclass hello: def __init__(self,url,selepath='c:\\1\\selenium\\chromedriver\\98\\chromedriver.exe'):self.url=urlself.seleniumpath=selepathser = Service(self.seleniumpath)"""这个是新版本的selenium指定的语法,以前是用Options在这里还能自己加上 header 等语句,后面会找例子解释"""self.driver=webdriver.Chrome(service = ser)"""无头模式 --headless,就是后台运行,不会看见有chrome打开,测试就不打开了包含多种参数from selenium.webdriver.chrome.options import Options
chrome_optiOns= Options()
#chrome_options.add_argument("--disable-extensions")
#chrome_options.add_argument("--disable-gpu")
#chrome_options.add_argument("--no-sandbox") # linux only
chrome_options.add_argument("--headless")
# chrome_options.headless = True # also works
driver = webdriver.Chrome(service = ser,optiOns=chrome_options)
"""
self.driver.maximize_window()#self.driver.#窗口最大化self.driver.get(self.url)#打开网页def closedriver(self):self.driver.close()x=hello('https://www.baidu.com')x.closedriver()

注意自己保存的chromedriver路径
注意打开的网站必须有 https:// 或 http://开头
注意最后要做 closedriver() 关闭driver,不然就会有机会把driver留在进程,别怕,它很安静,就是呆呆的,一动也不动,也不会出来咬你屁股
旧版本你开多少次你不关它就有多少个,现在大几率只有一两个了

如何获取网页元素(element)
有学过一点dom,或者其他爬虫的话,都知道通常是怎么捕获网页元素的,分别是 class名,id名,包含名,xpath路径,ccs选择器,tag等等,列出来的最常用,其实还有别的这里不细说了

怎么找到这些元素的名字呢
用浏览器 的 devtools吧,打开chrome后按f12或ctrl+shift+i就会打开开发者工具,然后你就可看到整个网页渲染后的代码,嗯,是渲染后的,这个很关键

随便拿百度百科练练手吧
打开devtools 然后点一下
在这里插入图片描述这个按钮
然后指向你想要的获取的网页元素
在这里插入图片描述
就很简单的知道这个元素的位置
再右键>复制
在这里插入图片描述
有必要讲解一下:
copy element: 当前的网页代码段,包括嵌套的都会一次复制
copy outerHtml:差不多同上不知道有啥区别

copy jspath js路径
copy styles: css style
copy xpath: xpath 路径 它会尽量用@classname @id 作为路径,也是 findbyelement (by.xpath) (待会示范)
copy full xpath : 绝对xpath路径

xpath 是最快的最准确,但是路径也是最长的,嫌麻烦可以单独获取 classname id 等等,方法是选取元素后再下面的properties就可以看到了
在这里插入图片描述
好了,复制了路径,就可以获取元素内容了,请看下面代码:

x=self.driver.find_element(By.CSS_SELECTOR,"body")
y=self.driver.find_element(By.XPATH,"/html/body/div[3]/div[2]/div/div[1]/dl[1]/dd/a[1]")
#xpath绝对路径
z=self.driver.find_element(By.class_namee,"cmn-btn-28.cmn-btn-hover-blue.audio-play.title-audio-play.J-title-audio-play")#classname 不允许空格,空格用.代替

上面的是简单版的,不是很保险,就以后再补充吧
然后捕获元素,就可以拿到里面的内容了

z.get_attribute('textContent')
#获取文本内容
z.get_attribute('innerHTML')
#获取该元素下的整片代码
z.get_attribute('href')
#获取网址
z.get_attribute('src')
#加载的文件内容,如图片,js,文件等等

接着是模拟鼠标,键盘动作了

首先讲轻度,对于单一的操作

z.click()
z.send_key("abcd")
z.send_key(Keys.PAGE_DOWN)

尤其是PAGE_DOWN 这个是用来翻页的,因为是模拟渲染效果,所以翻页是必须的

多个动作 action chains:

source_element = self.driver.find_element(By.link_text,"Courses")target_element = self.driver.find_element(By.link_text,"Hard")
action = ActionChains(self.driver)
#action.move_to_element(By.class_name,"xxx")
#action.sendkeys
#action.click()
action.drag_and_drop(source_element, target_element)action.perform()

就是把多个动作放到action ,然后perform()释放

由于变幅问题,还有延时执行,切换tab,iframe就下次再讲吧


推荐阅读
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用python输入PDF编号自动下载freepatentsonline.com的文档#!usrbinenvpython3#codingutf-8#Version:python3. ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 场景1.IE,Firefox浏览器访问不了网站,谷歌浏览器可以,返回错误码DNS_PROBE_POSSIBLE.2.pingwww.qq.com可以ping通,ping局域 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 校内无法访问IEEE等部分数据库的解决方案
    解决了校内无法访问IE ... [详细]
author-avatar
亚瑟女皇韩版欧美风情女装旗舰店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有