首页IT科技python selenium find_elements(Selenium Python bindings 文档二)

python selenium find_elements(Selenium Python bindings 文档二)

时间2025-06-16 05:50:19分类IT科技浏览4957
导读:3 跳转...

3 跳转

使用Webdriver要做的第一件事情是跳转到一个页面            。一般的方式是通过调用get方法                       。

driver.get("http://www.python.org")

WebDriver在返回对测试或脚本的控制之前一直等到页面完全载入为止       。但是如果页面使用了很多AJAX            ,WebDriver也许不知道什么时候页面会完全载入                       ,就不值得这么做了         。如果你需要确保这样的页面完全载入       ,可以使用waits方法                      。

3.1 与页面交互

只是能到达页面并不是十分有用         ,我们很想做的是与页面交互           。或者                      ,更精确地      。与页面里的HTML元素                     。首先           ,我们需要找到一个元素               。WebDriver提供了很多方法来需找元素   。假设一个元素定义为:

<input type="text" name="passwd" id="passwd-id" />

你可以使用以下方法去找到这个元素:

Element = driver.find_element_by_id(“passwd_id            ”)

Element = driver.find_element_by_name(“passwd                       ”)

Element = driver.find_element_by_xpath(“/input[@id=’passwd-id’]       ”)

还可以通过文字找到一个链接      ,但是要小心!这个文字必须是完全匹配!在WebDriver里使用XPATH也要小心                    。 如果有多个元素满足查询                     ,将只有第一个满足条件的被返回                   。如果没有发现任何元素               ,将会报NoSuchElementException。

WebDriver 有一个基于对象的API                。我们使用相同的接口来代表各种元素                       。这意味着在使用IDE的自动完成功能的时候   ,你或许看到很多可以调用的方法   。但是不是所有的都行得通或者可行            。但是无需担心!WebDriver将试图去做正确的事情                    ,而且如果你调用了一个行不通的方法                   ,会抛出一个异常                       。

你得到了一个元素,你能做什么呢?首先                ,你也许想在输入框中输入一段文字       。

Element.send_keys(“some text         ”)

你可以通过Keys类模仿按箭头键

Element.send_keys(“and some                      ”, Keys.ARROW_DOWN)

在任意元素上都是可以调用send_keys的                       ,这使得测试键盘快捷键比如用在Gmail上的   ,成为可能         。一个副作用是在输入框中输入字符将不会自动清空                      。反而            ,你输入的将会被添加在已有文本之后           。你可以很容易使用clear方法清空输入框或输入区域的内容      。

Element.clear()

3.2 填充表单

我们已经看到如何在输入框里输入字符                       ,但是       ,其他元素呢?你可以选择选择框的状态         ,你可以使用setSelected来设置比如选项标签为选中状态                     。处理SELECT选项并不是太坏               。

Select = driver.find_element_by_xpath(“//select           ”)

All_options = select.find_element_by_tag_name(“option      ”)

For option in all_options:

Print “value is: %s                     ” %option.get_attribute(“value               ”)

Option.click()

这将会发现页面上第一个SELECT元素                      ,然后循环通过每一根的OPTION           ,打印出他们的值      ,然后依次选中每个   。

当你完成填充表单之后                     ,你也许想提交它                    。一个办法是找到submit按钮并点击它                   。

# Assume the button has the ID “submit   ”

Driver.find_element_by_id(‘submit’).click()

或者               ,WebDriver在每个元素上都有很方便的submit方法。如果你在一个form的元素上调用这个方法   ,WebDriver将会查询DOM树                    ,直至发现包含它的form然后调用submit                。如果元素没有在form里面                   ,将会抛出NoSuchElementExcellent

Element.submit()

3.3 托和拽

Element = driver.find_element_by_name(“source                    ”)

Target = driver.find_element_by_name(“target                   ”)

From selenium.webdriver import ActionChains

Action_chains = ActionChains(driver)

Action_chains.drag_and_drop(element, target)

3.4 在窗口和帧之间移动

在现在的web应用中很少窗口里没有任何帧                       。WebDriver支持使用switch_to_window方法在命名窗口里移动   。

Driver.switch_to_window(“windowName”)

所有对driver的调用现在都被解释为直接到特定的窗口            。但是如何知道窗口的名字?看一下打开窗口的javascript或者链接                       。

<a href=                ”somewhere.html                       ” target=   ”windowName            ”>Click here to open a new window</a>

作为选择,你可以传一个窗口句柄给switch_to_window()方法       。知道这个                ,就可以再每个打开的窗口之间迭代访问

For handle in driver.window_handlers:

Driver.switch_to_window(handle)

也可以在帧之间切换

Driver.switch_to_frame(“frameName                       ”)

也可以通过用点分解路径访问子帧                       ,可以通过指定index来确定帧         。

Driver.switch_to_frame(frameName.0.child)

3.5 弹出窗口

Selenium WebDriver有对处理弹出窗口的内置支持                      。在你激发一个动作可以打开一个弹出窗口   ,你可以通过以下方式访问alert           。

Alert = driver.switch_to_alert()

这将返回当前打开的警告对象      。通过这个对象            ,你可以接受                       ,取消       ,读取它的内容或甚至在提示里输入内容                     。这个借口在警告         ,确认                      ,提示里工作的一样好               。

3.6 导航:历史和定位

早先           ,我们使用get方法来涵盖跳转   。如你所见      ,WebDriver有很多更小的                     ,任务集中的接口               ,导航是一个很有用的任务                    。为了跳转到一个页面   ,你可以使用get方法:driver.get(“http://www.example.com       ”)

为了在浏览器历史里向前或向后移动:

Driver.forward()

Driver.back()

请注意这个功能完全依赖于潜在的驱动                   。

3.7 Cookies

Driver.get(“http://www.example.com         ”)

# Now set the cookie. This one is valid for the entire domain

Cookie = {“key                      ”: “value           ”}

Driver.add_cookie(cookie)

# And now output all the available cookies for the current URL

All_cookies = driver.get_cookies()

For cookie_name, cookie_value in all_cookies.items():

Print “%s -> %s      ”, cookie_name, cookie_value

4 定位元素

有很多种在页面上定位元素的策略。你可以使用对你case最合适的那种                。Selenium提供下列方法来定位页面上的元素

Find_element_by_id

Find_element_by_name

Find_element_by_xpath

Find_element_by_link_text

Find_element_by_partial_link_text

Find_element_by_tag_name

Find_element_by_class_name

Find_element_by_css_selector

发现多个元素(这些方法将返回一个列表)

Find_elements_by_name

Find_elements_by_xpath

Find_elements_by_link_text

Find_elements_by_partial_link_text

Find_elements_by_tag_name

Find_elements_by_class_name

Find_elements_by_css_selector

4.1 通过ID定位元素

当你知道元素的id属性的时候使用这个方法                       。通过这个策略                    ,匹配定位的第一个具有id属性的元素将被返回                   ,如果没有元素具有id属性,抛出NoSuchElementException   。

例如                ,考虑下页面源文件

<html>

<body>

<form id="loginForm">

<input name="username" type="text" />

<input name="password" type="password" />

<input name="continue" type="submit" value="Login" />

</form>

</body>

<html>

Form元素可以被如此定位:login_form = driver.find_element_by_id(“loginForm                     ”)

4.2 通过名字定位

当你知道元素的name属性的时候使用这个方法            。通过这个策略                       ,匹配定位的第一个具有name属性的元素将被返回   ,如果没有元素具有name属性            ,抛出NoSuchElementException                       。

例如                       ,考虑下页面源文件

<html>

<body>

<form id="loginForm">

<input name="username" type="text" />

<input name="password" type="password" />

<input name="continue" type="submit" value="Login" />

<input name="continue" type="button" value="Clear" />

</form>

</body>

<html>

用户名和密码元素可以如下定位:

Username = driver.find_element_by_name(“username               ”)

Password = driver.find_element_by_name(“password   ”)

Continue = driver.find_element_by_name(“Continue                    ”)

4.3 通过xpath定位

Xpath是用来在XML文档中定位节点的语言       。

例如       ,考虑下页面源文件

<html>

<body>

<form id="loginForm">

<input name="username" type="text" />

<input name="password" type="password" />

<input name="continue" type="submit" value="Login" />

<input name="continue" type="button" value="Clear" />

</form>

</body>

<html>

Form元素可以如下定位:

声明:本站所有文章         ,如无特殊说明或标注                      ,均为本站原创发布         。任何个人或组织           ,在未征得本站同意时      ,禁止复制                、盗用                   、采集       、发布本站内容到任何网站            、书籍等各类媒体平台                      。如若本站内容侵犯了原著者的合法权益                     ,可联系我们进行处理           。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
三招搞定网站SEO优化(让你的网站排名飞升,吸引更多潜在客户) 语义分割项目实战(语义分割系列6-Unet++(pytorch实现))