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()
参考链接
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()
参考链接
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显示等待的判断条件