总结一下:
十四、Selenium的一些常用语法和方法
语法/方法 |
描述 |
from selenium import webdriver |
导入Selenium库 |
from selenium.webdriver.common.by import By |
导入定位策略的枚举类 |
from selenium.webdriver.support.ui import WebDriverWait |
导入等待元素加载的类 |
from selenium.webdriver.support import expected_conditions as EC |
导入等待条件的类 |
driver = webdriver.Chrome() |
创建浏览器对象,可以选择不同的浏览器 |
driver.get(‘高级检索-中国知网’) |
打开指定的URL |
driver.find_element(By.ID, ‘element_id’) |
查找元素,可以使用不同的定位策略 |
element.click() |
单击元素 |
element.send_keys(‘文本’) |
在元素上输入文本 |
element.clear() |
清空元素内容 |
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, ‘element_id’))) |
等待元素出现 |
driver.switch_to.window(‘window_name’) |
切换到指定窗口 |
driver.switch_to.frame(‘frame_name’) |
切换到指定iframe |
driver.execute_script(‘javascript_code’) |
执行JavaScript代码 |
driver.save_screenshot(‘screenshot.png’) |
保存屏幕截图 |
driver.quit() |
关闭浏览器并退出驱动程序 |
十五、选取元素的方法
定位策略 |
示例 |
描述 |
通过ID查找元素 |
driver.find_element(By.ID, ‘element_id’) |
使用元素的ID属性来定位元素。 |
通过名称查找元素 |
driver.find_element(By.NAME, ‘element_name’) |
使用元素的名称属性来定位元素。 |
通过标签名查找元素 |
driver.find_element(By.TAG_NAME, ‘element_tag’) |
使用元素的HTML标签名称来定位元素。 |
通过类名查找元素 |
driver.find_element(By.CLASS_NAME, ‘element_class’) |
使用元素的类名属性来定位元素。 |
通过CSS选择器查找元素 |
driver.find_element(By.CSS_SELECTOR, ‘css_selector’) |
使用CSS选择器来定位元素。 |
通过XPath查找元素 |
driver.find_element(By.XPATH, ‘xpath_expression’) |
使用XPath表达式来定位元素。 |
通过链接文本查找元素 |
driver.find_element(By.LINK_TEXT, ‘link_text’) |
使用链接文本来定位链接元素。 |
通过部分链接文本查找元素 |
driver.find_element(By.PARTIAL_LINK_TEXT, ‘partial_link_text’) |
使用部分链接文本来定位链接元素。 |
十六、Selenium CSS选择器
CSS选择器是一种用于选择HTML元素的模式。它允许我们根据元素的标签名、类名、ID、属性等属性进行选择。CSS选择器的语法简单而灵活,是前端开发中常用的定位元素的方式。
selenium中的css定位,实际是通过css选择器来定位到具体元素,css选择器来自于css语法。CSS定位有以下显著优点:
1、语法简洁
2、对比其他定位方式,定位效率更快
3、对比其他定位方式,定位更稳定
css选择器语法:
基础选择器
选择器 |
格式 |
示例 |
示例说明 |
选择全部 |
|
|
选择全部元素 |
标签选择器 |
html标签 |
p |
选择所有\<p>元素 |
ID选择器 |
#id属性值 |
#su |
选择所有id='su'的元素 |
类选择器 |
.class属性值 |
.s_btn |
选择所有class='s_btn'的元素 |
属性选择器1 |
属性名 |
type |
选择所有带type属性的元素 |
属性选择器2 |
属性名='属性值' |
type="submit" |
选择所有type="submit"的元素 |
属性选择器3 |
属性名~='属性值' |
type~="submit" |
选择所有type包含"submit"的元素 |
属性选择器4 |
属性名|='属性值' |
type|="submit" |
选择所有type以"submit"开头的元素 |
备注:某些元素属性有多个值(如class属性),值表现为以空格隔开,使用时需要单个取出使用。
组合选择器
组合选择器就是同时使用多个基础选择器,从而更好地筛选出目标元素
选择器 |
格式 |
示例 |
示例说明 |
标签指定属性 |
标签加属性描述 |
input#su |
选择所有id='su'的\<input>元素 |
并集 |
元素1,元素2 |
div,p |
选择所有\<div>和\<p>元素 |
父子 |
元素1>元素2 |
div>p |
选择所有父级是\<div>的\<p>元素 |
后代 |
元素1 元素2 |
div p |
选择\<div>中的所有\<p>元素 |
相邻 |
元素1+元素2 |
div+p |
选择\<div>同级后的相邻\<p>元素 |
同级 |
元素1~元素2 |
div~p |
选择\<div>同级后的所有\<p>元素 |
伪属性选择器
伪属性选择器是指元素在html中实际并不存在该属性,是由css定义的拓展描述属性。
选择器 |
格式 |
示例 |
示例说明 |
唯一子元素 |
:only-child |
p:only-child |
选择所有\<p>元素且该元素是其父级的唯一一个元素 |
第一子元素 |
:first-child |
p:first-child |
选择所有\<p>元素且该元素是其父级的第一个元素 |
最后子元素 |
:last-child |
p:last-child |
选择所有\<p>元素且该元素是其父级的最后一个子元素 |
顺序选择器 |
:nth-child(n) |
p:nth-child(2) |
选择所有\<p>元素且该元素是其父级的第二个子元素 |
顺序类型选择器 |
:nth-of-type(n) |
p:nth-of-type(2) |
选择所有\<p>元素且该元素是其父级的第二个\<p>元素 |
倒序选择器 |
:nth-last-child(n) |
p:nth-last-child(2) |
选择所有\<p>元素且该元素是其父级的倒数第二个子元素 |
倒序类型选择器 |
:nth-last-of-type(n) |
p:nth-last-of-type(2) |
选择所有\<p>元素且该元素是其父级的倒数第二个\<p>元素 |
css常用的定位方式:
通过class定位,一个标签有多个class中间的空格用点代替,通过父标签的父标签定位p,在通过p定位子标签input,通过标签+class定位
项目 Value
#element element: div p 选择div标签元素内部的所有p标签元素
#element>element: div>p 选择父元素为div标签元素的所有p标签元素
#element element: div p div标签元素内部的所有p标签元素
#element>element: div>p 选择父元素为div标签元素的所有p标签元素
#element+element: div+p 选择紧接在div元素之后的所有p元素
#id: #firstname 选择id=‘fistname’的所有元素
#[attritube=value]:[target=_blank] 选择target="_blank"的所有元素
#[attribute]: [target] 选择带有target属性的所有元素
#[attritube=value]:[title=flower] 选择title属性包含单词‘flower’的所有元素
#:first-child p:first-child 选择属于父元素的第一个子元素的每个p标签元素
#[attribute^=value] a[src^=‘https’] 选择其src属性以’https’开头的每个a标签元素
#[attribute= v a l u e ] a [ s r c =value] a[src=value]a[src=’.pdf’] 选择其src属性以’.pdf’结尾的所有a标签元素
#[attribute*=value] a[src*=‘abc’] 选择其src属性包含’abc’子串的每个a标签元素
#:first-of-type p: first-of-type 选择父元素的首个p标签元素的每个p标签元素(所有p标签对应的父标签的第一个子p标签元素)
#:last-of-type p:last-of-type 选择父元素的最后一个p标签元素的每个p标签元素(所有p标签对应的父标签的最后一个子p标签元素)
#:only-of-type p:only-of-type 选择父元素里面唯一的p标签元素的每个p标签元素(所有p标签对应的父标签元素只有一个子p标签元素)
#:nth-child(n) p:nth-child(2) 选择属于父元素的第二个子元素的每个p标签元素(所有的p标签的父标签对应的第二个子标签元素)
#:only-child p:only-child 选择父元素里面只有一个标签的每个p标签元素(父标签里面只有一个p标签)
#:nth-last-child(n) p:nth-last-child(2) 选择属于父元素的倒数第二个子元素的每个p标签元素(所有的p标签的父标签对应的倒数第二个子标签元素)
#:nth-of-type(n) p:nth-of-type(2) 选择属于其父标签元素的第二个p标签的每个p标签元素(所有p标签对应的父标签的第二个p标签元素,也就是这个和p标签平级)
#:nth-last-of-type(n) p:nth-last-of-type(2) 选择属于其父标签元素的倒数第二个p标签的每个p标签元素(所有p标签对应的父标签的倒数第二个p标签元素,也就是这个和p标签平级)
#:last-child p:last-child 选择属于其父标签元素最后一个子元素是p标签的每个p标签元素(父标签的最后一个标签必须是p标签)
十七、selenium 获取href
Selenium是一个常用的自动化测试工具,可用于模拟用户操作浏览器。在Web开发和爬虫中,经常需要从网页中获取链接地址(href),而Selenium提供了各种方式来实现这个目标。 下面看如何使用Selenium的find_element(By.XPATH,‘xpath_expression’ )方法来获取网页中的href属性值。
什么是XPath?
XPath(XML Path Language)是一种用于在XML和HTML文档中定位元素的语言。在Selenium中,我们可以使用XPath来定位网页中的元素,包括链接。 XPath表达式通过路径和表达式来选择元素,常用的表达式包括//选取节点)、@选取属性)等。
使用find_element(By.XPATH,‘xpath_expression’ )获取href(链接地址)的示例代码:
from selenium import webdriver
# 创建浏览器驱动
driver = webdriver.Chrome()
# 打开网页
driver.get("高级检索-中国知网")
# 使用XPath定位链接。使用XPath表达式//a[@href]定位所有包含href属性的链接元素。这个表达式指定了选择所有a标签(链接),并且这些标签包含href属性。
element = driver.find_element(By.XPATH,"//a[@href]") # 获取链接的地址。
href = element.get_attribute("href") # 将获取的地址保存在href变量中。
print(href)
# 关闭浏览器
driver.quit()文章来源:https://www.toymoban.com/news/detail-829680.html
注:本系列文章参考部分网文,并根据调试过程进行了修改和完善,侵删。文章来源地址https://www.toymoban.com/news/detail-829680.html
到了这里,关于用selenium爬取知网信息(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!