选择元素
如果我想在百度搜索页面自动输入“selenium”该怎么办?
这是一种控制网页上界面元素的方法。
Web 界面自动化。要控制元素,必须首先选择或放置界面元素。
也就是你先告诉浏览器你要和哪个界面元素交互,然后让浏览器找到你要交互的界面元素。
首先,您需要让浏览器找到该元素,然后您需要能够与其交互。
选择元素的基本方法
通过网络自动化,您需要告诉浏览器您想要与哪些界面元素进行交互。
那么我们如何告诉浏览器呢?
做到这一点的方法是告诉浏览器您想要操作的Web 元素的特征。
这告诉浏览器该元素的独特之处,以便浏览器可以快速找到它。
如何检查元素的属性?
浏览器的开发人员工具栏可帮助您查看和选择Web 元素。单击F12 显示开发人员工具栏。您正在寻找的是相应的html 元素。
一、根据id属性选择元素
将id 视为用于在HTML 中标记该元素的元素编号。
根据规范,如果一个元素具有id 属性,则该ID 在当前HTML 中必须是唯一的。
因此,如果一个元素有ID,那么根据ID选择元素是最简单、最高效的方法。
从Selenium 导入网络驱动程序
从selenium.webdriver.chrome.service 导入服务
从selenium.webdriver.common.by 导入
###创建一个对象来控制浏览器
###创建WebDriver类型的实例对象
wb=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
# 调用WebDriver对象的get方法使浏览器打开指定的URL。
wb.get(\’https://www.baidu.com\’)
###根据Id 选择元素并返回与该元素对应的WebElement 对象。
element=wb.find_element(By.ID,\’kw\’)
element.send_keys(\’Selenium\\n\’)
如果我们在这里
element.send_keys(\’Selenium\\n\’)
如果您不使用Enter 键入,则可以先键入,然后单击以执行操作。 “百度点击”的元素属性如下:
从Selenium 导入网络驱动程序
从selenium.webdriver.chrome.service 导入服务
从selenium.webdriver.common.by 导入
###创建一个对象来控制浏览器
###创建WebDriver类型的实例对象
wb=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
# 调用WebDriver对象的get方法使浏览器打开指定的URL。
wb.get(\’https://www.baidu.com\’)
###根据Id 选择元素并返回与该元素对应的WebElement 对象。
element=wb.find_element(By.ID,\’kw\’)
element.send_keys(\’硒\’)
element=wb.find_element(By.ID,\’su\’)
元素.click()
二、根据class选择元素
每个plant 元素都有一个值为plant 的类属性。
所有动物元素都有一个值为animal 的类属性。
如果要选择所有动物:使用find_elements。如果没有条件匹配,则返回空列表。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
通过创建#WebDriver 实例对象来指定Chrome 浏览器驱动程序的使用。
###创建WebDriver类型的实例对象
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
# WebDriver实例对象的get方法允许浏览器打开指定的URL。
wd.get(\’https://cdn2.byhy.net/files/selenium/sample1.html\’)
# 根据类名选择元素并返回列表
# 里面有一个WebElement对象,对应的是class属性值为animal的元素。
elements=wd.find_elements(By.CLASS_NAME, \’动物\’)
# 选取列表中的每个WebElement 对象并打印其文本属性的值。
# text属性是网页中WebElement对象对应的元素的文本内容。
用于元素: 个元素
打印(元素.文本)
与find_elements 不同,find_element 返回第一个类属性为animal 的元素。如果没有元素满足条件,则会抛出异常。
三、根据tag选择元素
您可以通过指定参数By.TAG_NAME来选择标签名称为div的所有元素。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.get(\’https://cdn2.byhy.net/files/selenium/sample1.html\’)
# 根据标签名称选择元素并返回列表
# 里面有一个WebElement对象,对应一个名为div的元素。
elements=wd.find_elements(By.TAG_NAME, \’div\’)
# 选取列表中的每个WebElement 对象并打印其文本属性的值。
# text属性是网页中WebElement对象对应的元素的文本内容。
用于元素: 个元素
打印(元素.文本)
四、通过WebElement对象选择元素
除了WebDriver 对象具有选择元素的方法之外,WebElement 对象也具有选择元素的方法。
WebElement 对象还可以调用find_elements 和find_element 等方法。
WebDriver 对象选择整个网页内的元素,WebElement 对象选择元素内的元素。前三个方法都是通过WebDriver实例化和选择元素。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.get(\’https://cdn2.byhy.net/files/selenium/sample1.html\’)
Element=wd.find_element(By.ID,\’容器\’)
# 限制选择元素的范围在id为容器的元素之内。
span=element.find_elements(By.TAG_NAME, \’span\’)
适用跨度: 跨度
打印(跨度.文本)
五、等待元素出现
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
#输出该元素的文本内容
打印(元素.文本)
当您与网页交互时,某些元素内容可能不会立即显示,可能需要一些时间。
例如股票搜索的例子,点击搜索后,浏览器必须向服务器发送搜索请求来处理并返回搜索结果。因此,单击搜索后可能需要一些时间才能显示结果,但服务器通常速度更快,结果会立即显示。
这意味着在您点击查询后,网站会在返回搜索结果之前运行以下代码:
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
此时找不到ID为1的元素,报错。
selenium.common.Exceptions.NoSuchElementException: 消息: 没有这样的元素: 元素: 未找到{\’method\’:\’css 选择器\’,\’selector\’:\'[id=\’1\’]\’}
换句话说,代码在网站被搜索之前就已经运行了,响应时间跟不上代码运行的速度。
我怎么解决这个问题?
在搜索id 元素之前添加两行代码。
导入时间
睡眠时间(1)
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
导入时间
睡眠时间(1)
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
#输出该元素的文本内容
打印(元素.文本)
您还可以使用Selenium 中的implicitly_wait 隐式等待方法。
如果发现未找到某个元素,则不会立即返回未找到元素错误。
相反,会定期(每0.5 秒)再次搜索该元素,直到找到为止。
或者,如果超过指定的最大等待时间,则会引发异常(对于find_elements 等方法,将返回空列表)。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.implicitly_wait(10)
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
# 导入时间
# 时间.睡眠(1)
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
#输出该元素的文本内容
打印(元素.文本)
wd.implicitly_wait(10)
此方法接受指定最大等待时间的参数。
操控元素的基本方法
点击元素
element.click() 将字符串输入到元素中。通常用于输入框等元素。
element.send_keys(\’selenium\’) 检索元素中包含的信息,包括文本内容。
用于元素: 个元素
打印(元素.文本)
这三个都是上面学过的。
如果想清除输入框中已有的内容,可以使用WebElement对象的clear方法。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.implicitly_wait(10)
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
# 导入时间
# 时间.睡眠(1)
元素.clear()
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’技术\\n\’)
输入()
获取元素的文本内容
从上面我们可以看出,我们可以通过WebElement对象的text属性来检索界面中显示的元素的文本内容。
element=wd.find_element(By.ID, \’动物\’)
打印(元素.文本)
获取元素属性
如果页面上没有,我该怎么办?
通过WebElement对象的get_attribute方法获取元素的属性值。
例如,要获取元素属性类的值,可以使用element.get_attribute(\’class\’)。
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.implicitly_wait(10)
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
# 导入时间
# 时间.睡眠(1)
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
#输出该元素的文本内容
打印(元素.文本)
#####获取属性
print(element.get_attribute(\’类\’))
获取整个元素对应的HTML
从Selenium 导入网络驱动程序
从selenium.webdriver.common.by 导入
从selenium.webdriver.chrome.service 导入服务
wd=webdriver.Chrome(service=Service(r\’D:\\GoogleDownload\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe\’))
wd.implicitly_wait(10)
wd.get(\’https://www.byhy.net/_files/stock1.html\’)
element=wd.find_element(By.ID, \’kw\’)
element.send_keys(\’通讯\\n\’)
# 导入时间
# 时间.睡眠(1)
# 返回页面ID为1的元素
element=wd.find_element(By.ID,\’1\’)
#####获取整个HTML
print(element.get_attribute(\’outerHTML\’))
使用
print(element.get_attribute(\’outerHTML\’))
返回结果:
获取整个元素内部的HTML
####获取元素内的HTML
print(element.get_attribute(\’innerHTML\’))
获取输入框里面的文字
输入输入框元素无法使用文本属性来检索内部输入文本。在这种情况下,您可以使用element.get_attribute(\’value\’)。只需找到value 属性即可。
element=wd.find_element(By.ID, \’input1\’)
print(element.get_attribute(\’value\’)) # 获取输入框中的文本
以上#Python+Selenium Web自动化测试知识点2相关内容来源网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/94013.html