我的浏览器成精了,居然会自己找资源

论如何让浏览器成精?首选selenium
在这里插入图片描述

selenium模块让Python直接控制浏览器,实际点击链接,填写登录信息


  • 安装pip install selenium

安装之后准备自动打开百度

from selenium import webdriver
browser=webdriver.Chrome()
type(browser)
browser.get('http://www.baidu.com')

运行之后发现程序报错,查了一下原来还需要在python安装路径下 放一个浏览器驱动才可以。。。

我太南了

少走弯路,附上谷歌浏览器的驱动链接


  • 点.get()方法打开链接
from selenium import webdriver#导入模块
browser=webdriver.Chrome()#指定要打开的浏览器,生成的是一个WebDriver对象
browser.get('http://www.baidu.com')#get()方法打开链接
  • 在页面中寻找元素

WebDriver对象有好几种方法用于在页面中寻找元素。
他们被分为find_element_*方法和find_elements_*方法

find_element_*方法:返回一个WebElement对象,代表页面中匹配查询的第一个元素
find_elements_*方法:返回一个WebElement_*对象的列表,包含页面中所有匹配的元素

selenium的WebDriver方法,用于寻找元素

方法名返回的WebElement对象/列表
browser.find_element_by_class_name(name) browser.find_elements_by_class_name(name)使用CSS类name的元素
browser.find_element_by_css_selector(selector) browser.find_elements_by_css_selector(selector)匹配CSS selector的元素
browser.find_element_by_class_id(id)
browser.find_elements_by_class_id(id)
匹配id属性值的元素
browser.find_element_by_link_text(text)
browser.find_elements_by_link_text(text)
完全匹配提供的text元素的<a>元素
browser.find_element_by_partial_link_text(text)
browser.find_elements_by_partial_link_text(text)
提供包含text的元素
browser.find_element_by_name(name)
browser.find_elements_by_name(name)
匹配name属性值的元素
browser.find_element_by_tag_name(name)
browser.find_elements_by_tag_name(name)
匹配标签name的元素
大小写无关,<a>元素匹配‘a’和’A’

除了最后一个其他的都是区分大小写


  • 点击页面
    find_element_*方法和find_elements_*方法返回的WebElement对象有一个click()方法,模拟鼠标在该元素上的点击
    这里模拟自动点击b站的链接
import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.bilibili.com/')#get主站
linkelem = browser.find_element_by_partial_link_text('动画')#找包含动画两个字的第一个元素
linkelem.click()#点击找到的动画元素
browser.get(browser.current_url)
linkelem2 = browser.find_element_by_partial_link_text('音乐')
time.sleep(3)#睡3秒
linkelem2.click()#点击音乐
browser.get(browser.current_url)#返回浏览器页面的当前链接url
linkelem3 = browser.find_element_by_partial_link_text('舞蹈')
time.sleep(3)#再睡三秒
linkelem3.click()#点击舞蹈


上面有用到current_url方法,是返回当前链接的意思,返回一个字符串
运行上面的码儿
在这里插入图片描述
嗯,好像很ok的样子,但是我错了…
有点多此一举
不用current_url方法照样也能用,前面就当纯粹地学了个知识点

import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.bilibili.com/')
linkelem = browser.find_element_by_partial_link_text('动画')
linkelem.click()
linkelem2 = browser.find_element_by_partial_link_text('音乐')
time.sleep(3)
linkelem2.click()
linkelem3 = browser.find_element_by_partial_link_text('舞蹈')
time.sleep(3)
linkelem3.click()

brower这个变量本来就是跟着浏览器变的

没必要在返回当前url然后再get一遍

我好傻
在这里插入图片描述


  • 填写并提交表单
    向web页面的文本字段发送击键,只要找到该文本字段的<input>或<textarea>元素,然后调用send_key()方法

于是我要试试百度自动搜索,按F12看了一下搜索框的代码,id=kw
在这里插入图片描述

这一串是百度的搜索框前端

from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.baidu.com/')
searchurl=browser.find_element_by_id('kw')#定位输入款
searchurl.send_keys('python学习')#在输入框输入python学习
searchurl.submit()#提交表单

执行了一下没问题,但是当把同样的码放在b站就不行了,猜猜应该是这个搜索框默认有文字的原因
在这里插入图片描述

世界上最远的距离大概就是明明看到一个页面元素站在那里,但是我却定位不到!!/(ㄒoㄒ)/~~
仔细看了看b站搜索款的前端码,嗯…
在这里插入图片描述
小破站这里不应该用id呀,应该用class定位…就这我研究了半个小时,一万只草泥马狂奔而过
小破站的自动搜索应该这么写↓

from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.bilibili.com/')
searchurl=browser.find_element_by_class_name('nav-search-keyword')
searchurl.send_keys('专业团队')
searchurl.submit()

执行一下

在这里插入图片描述
在找解决方法的过程中还找到了另外一种高效查找元素的方法,虽然最后没用到
这个方法就是xpath定位,上面只讲了id 、class等
附一个讲的比较详细的链接,免得自己以后找不到

再补一课
史上最全30种selenium定位方法


  • 发送特殊键
    selenium有一个模块,针对不能用字符串值输入的键盘击键
    这些保存在selenium.webdriver.common.keys模块的属性中
    selenium.webdriver.common.keys常用的变量
属性含义
.DOWN;.UP;.RIGHT;.LEFT键盘箭头键
ENTER;.RETURN回车和换行键
.HOME;.END
.PAGE_UP;PAGE_DOWN
home键,end键,pageup,pagedown键
其它啊都是点+大写按键名称,TAB,F1-F12.ESC.

  • 点击浏览器按钮
browser.back()返回按钮
browser.forward()前进按钮
browser.refresh()刷新按钮
browser.quit()退出按钮

总结:就是找页面的元素有点烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值