注:下面的操作演示的html文件,都是从某个地址中打开的,因此要注意地址中存在转义字符的可能性,用/可以避免转义,用\ 也可以避免转义。如果要统一的话最好使用\ 。
webdriver 可以很方便的使用findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用findElements 方法。
checkbox的html:
下面的脚本是将前三个checkbox的框框勾选中。注意:下面获取到的id是框框的id;或者是框框的type。
脚本:
from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:/Users/朱俊锐/Desktop/课件/selenium2html/selenium2html/checkbox.html")
driver.get(file)
driver.maximize_window()
# driver.find_element_by_id("c1").click() 非常麻烦
# driver.find_element_by_id("c2").click()
# driver.find_element_by_id("c3").click()
inputs = driver.find_elements_by_tag_name("input")
for input in inputs:
if input.get_attribute("type") == "checkbox":
input.click()
time.sleep(4)
driver.quit()
get_attribute:获得属性值。
要求:进入到inner框架中,进行百度的搜索,因为百度的页面在inner的框架当中。
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:/Users/朱俊锐/Desktop/课件/selenium2html/selenium2html/frame.html")
driver.get(file)
driver.switch_to.frame("f1") # f1和f2是id
driver.switch_to.frame("f2")
driver.find_element_by_id("kw").send_keys("布格拉")
driver.find_element_by_id("su").click()
time.sleep(4)
driver.quit()
现在我们要点击到右下角的click按钮,会出现一个提示框。而该按钮是在f1的框架当中,但是此时在上面代码的基础上(在f2框架中),如何定位到f1框架中的元素?
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:/Users/朱俊锐/Desktop/课件/selenium2html/selenium2html/frame.html")
driver.get(file)
driver.switch_to.frame("f1") # f1和f2是id
driver.switch_to.frame("f2")
driver.switch_to.default_content()
driver.switch_to.frame("f1")
driver.find_element_by_link_text("click").click()
time.sleep(4)
driver.quit()
总结:如果页面有框架时,要层层进入,才能取得对应框架内的元素。当进入到一个框架的子框架时,又要返回去获得它父框架的元素,只能重新跳转到默认的全局页面,重新去层层进入对应的框架中拿到元素。
有可能嵌套的不是框架,而是窗口,还有真对窗口的方法:switch_to.window
用法与switch_to.frame 相同:driver.switch_to.window("windowName")
要求:将光标移动到Another action处:
from selenium import webdriver
import os
import time
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\level_locate.html")
driver.get(file)
ele = driver.find_element_by_id("dropdown1").find_element_by_link_text("Another action")
ActionChains(driver).move_to_element(ele).perform()
time.sleep(4)
driver.quit()
下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项。
例如,我们要选择下拉框下的10.69的值。
除了直接用XPath或者css_selector来直接定位到10.69的元素外,还可以通过先定位到select的元素,再定位到它下拉框的元素。
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\drop_down.html")
driver.get(file)
driver.maximize_window()
time.sleep(3)
options = driver.find_element_by_id("ShippingMethod").find_elements_by_tag_name("option")
for option in options:
if option.get_attribute("value") == "10.69":
option.click()
time.sleep(4)
driver.quit()
除此之外,还可以:
利用options[3] 来定位元素。
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\drop_down.html")
driver.get(file)
driver.maximize_window()
time.sleep(3)
options = driver.find_element_by_id("ShippingMethod").find_elements_by_tag_name("option")
options[2].click()
time.sleep(4)
driver.quit()
要求,点击该a标签后,处理弹出的alert提示。
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\drop_down.html")
driver.get(file)
driver.maximize_window()
time.sleep(2)
driver.find_element_by_id("tooltip").click()
# 先拿到处理alert的句柄
time.sleep(3)
alert = driver.switch_to.alert
alert.accept()
time.sleep(3)
driver.quit()
流程:
测试脚本:
from selenium import webdriver
import os
import time
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\send.html")
driver.get(file)
driver.maximize_window()
driver.find_element_by_tag_name("input").click()
time.sleep(3)
alert = driver.switch_to.alert
alert.send_keys("朱俊锐")
alert.accept() # 对应地,alert.dismiss可以取消提示框
time.sleep(3)
driver.quit()
流程:
测试脚本:
from selenium import webdriver
import os
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\modal.html")
driver.get(file)
driver.maximize_window()
time.sleep(3)
driver.find_element(By.LINK_TEXT, "Click").click()
time.sleep(2)
div0 = driver.find_element(By.CLASS_NAME, "modal-body")
div0.find_element(By.ID, "click").click()
time.sleep(3)
div1 = driver.find_element(By.CLASS_NAME, "modal-footer")
div1.find_element(By.CLASS_NAME, "btn").click()
# 还可以
# buttons = div1.find_elements_by_tag_name("button)
# buttons[0].click()
time.sleep(3)
driver.quit()
总结:在对话框中,如果处理的元素在div里面,先要获取到div标签的元素,再去获取div标签内的元素。
脚本:
from selenium import webdriver
import os
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
file = "file:///"+os.path.abspath("C:\\Users\\朱俊锐\\Desktop\\课件\\selenium2html\\selenium2html\\upload.html")
driver.get(file)
driver.maximize_window()
time.sleep(3)
driver.find_element_by_tag_name("input").send_keys("C:\\Users\\朱俊锐\\Desktop\\R-C.jfif")
time.sleep(3)
driver.quit()
注意:上传文件用send_keys()
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/ZJRUIII/article/details/125027269
内容来源于网络,如有侵权,请联系作者删除!