selenium基本使用

1.获取单个节点方法

操作方法

序号 操作 描述
1 find_element_by_id() 通过id查找
2 find_element_by_name() 通过name查找
3 find_element_by_xpath() 通过xpath查找节点
4 find_element_by_link_text() 通过给定的文字查找响应的"a链接"
5 find_element_by_partial_link_text() 模糊定位文字链接
6 find_element_by_tag_name() 通过标签名查找
7 find_element_by_class_name() 通过class属性名查找
8 find_element_by_css_selector() 通过css属性选择器查找

等效操作

browser.find_element_by_id("q")<==等效==>browser.find_element(By.ID,'q')

注意

1.find_element只能查找到第一个节点.
2.当个节点查找,如果不存在怎会报错!
3.返回结果为WebElement类型

2.查找多个节点

序号 操作 描述
1 find_elements_by_id() 通过id查找
2 find_elements_by_name() 通过name查找
3 find_elements_by_xpath() 通过xpath查找节点
4 find_elements_by_link_text() 通过给定的文字查找响应的"a链接"
5 find_elements_by_partial_link_text() 模糊定位文字链接
6 find_elements_by_tag_name() 通过标签名查找
7 find_elements_by_class_name() 通过class属性名查找
8 find_elements_by_css_selector() 通过css属性选择器查找

等效操作

browser.find_elements_by_css_selector('.serviceli')<==等效==>browser.find_elements(By.CSS_SELECOTR,'.serviceli')

注意

1.find_elements可以找到符合要求的所有节点.
2.如果节点不存在,则返回空列表.
3.返回结果为WebElement类型

3.节点交互

selenium可以驱动浏览器执行一些操作,也就是说可以模拟浏览器执行一些动作.

常见的用法

序号 操作 描述
1 send_keys() 输入文字用
2 clear() 清空文字用
3 click() 点击按钮时用

案例

#!/usr/bin/envpython3
#-*-coding:utf-8-*-
#author:xiaoye

fromseleniumimportwebdriver

#设置ChromeOptions,使得浏览器可以无界面运行.
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
#实例化浏览器对象
browser=webdriver.Chrome(chrome_options=chrome_options)

try:
#设置访问网站
browser.get('http://www.xilasuo.top/search/')
#查找name='q'的属性值
input=browser.find_element_by_name('q')
#输入关键字
input.send_keys('你好')
#清除输入内容
input.clear()
#再次输入关键在
input.send_keys('selenium')
#获取"搜索按钮"
button=browser.find_element_by_css_selector('.search-btn')
#点击按钮
button.click()
#返回搜索后的连接
print(browser.current_url)
#返回搜索后的cookies
print(browser.get_cookies())
#返回搜索后的网页面
print(browser.page_source)
finally:
browser.close()

参考链接

selenium-节点交互参考文档

4.动作链

鼠标拖动/键盘按键等,需要动作链来实现

案例

#!/usr/bin/envpython3
#-*-coding:utf-8-*-
#author:xiaoye

fromseleniumimportwebdriver
fromselenium.webdriverimportActionChains

browser=webdriver.Chrome()
url='https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'

browser.get(url)
#跳转到id为iframeResult的frame中
browser.switch_to.frame('iframeResult')
#获取被拖拽元素
source=browser.find_element_by_css_selector('#draggable')
#获取目标元素
target=browser.find_element_by_css_selector('#droppable')
#实例化ActionChins
actions=ActionChains(browser)
#保存动作链到队列中
actions.drag_and_drop(source,target)
#触发动作链
actions.perform()

参考链接

selenium动作连参考链接

5.执行JavaScript

模拟滚动条,滚动的操作.

案例

#!/usr/bin/envpython3
#-*-coding:utf-8-*-
#author:xiaoye

fromseleniumimportwebdriver

browser=webdriver.Chrome()
browser.get('http://www.xilasuo.top')
#使用js脚本将滚动条滑到最下面
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#弹窗"ToBottom"
browser.execute_script('alert("ToBottom")')

6.获取节点信息

可以将selenium访问后的page_source作为html的资源提供给xpath/beautifulsoup/pyquery等解析,使用selenium也可解析内容.

获取属性

fromseleniumimportwebdriver

browser=webdriver.Chrome()
browser.get('http://www.xilasuo.top')
logo=browser.find_element_by_class_name('logo-title')
print(logo)
#使用get_attribute反向获取class属性名称
print(logo.get_attribute('class'))

其他操作

类似于beautifulsoup的get_text()和pyquery的text()

fromseleniumimportwebdriver

browser=webdriver.Chrome()
browser.get('http://www.xilasuo.top')
logo=browser.find_element_by_class_name('logo-title')
#获取文本值
print(logo.text)
#获取id节点信息
print(logo.id)
#获取该节点在页面的相对位置
print(logo.location)
#获取标签名
print(logo.tag_name)
#获取宽/高值
print(logo.size)

7.切换frame

网页中有一种节点是iframe,也就是子Frame.相当于页面中的页面,结构与外部网页面结构完全一致.

#切换子Frame
switch_to.frame()
#切换父Frame
switch_to.parent_frame()

8.延时等待

在Selenium中,get()方法会在网页框架加载结束后结束执行,如果此时执行page_source可能导致加载页面不完整.

隐式等待

#直到需要等待的时间结束时才返回结果或者抛出异常
browser.implicitly(10)

显示等待

#如果在等待时间内加载出需要的内容就返回加载的内容,如果未完成加载则抛出超时异常.

fromseleniumimportwebdriver
fromselenium.webdriver.common.byimportBy
fromselenium.webdriver.common.keysimportKeys
fromselenium.webdriver.supportimportexpected_conditionsasEC
fromselenium.webdriver.support.waitimportWebDriverWait

#设置ChromeOptions,使得浏览器可以无界面运行.
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
#实例化浏览器对象
browser=webdriver.Chrome(chrome_options=chrome_options)
try:
#设置访问网站
browser.get('http://www.xilasuo.top/search/')
#查找name='q'的属性值
input=browser.find_element_by_name('q')
#发送关键字
input.send_keys('你好')
#点击搜索
input.send_keys(Keys.ENTER)
#显性等待浏览器加载,设置为10s
wait=WebDriverWait(browser,10)
#注意:presece_of_element_located传入的是一个元祖
#指定class='news-list'的加载时间
lis=wait.until(EC.presence_of_element_located((By.CLASS_NAME,'news-list')))
print(lis)
finally:
browser.close()

等待条件

参考链接
EC显示等待的判断条件

原文地址:https://www.cnblogs.com/xilasuo/p/13127116.html