获取这个元素的方法:element=driver.find_element_by_id("passwd-id")element=driver.find_ele" />

Python爬虫之selenium高级功能

系统 1392 0

Python爬虫之selenium高级功能

 

原文地址

表单操作

元素拖拽

页面切换

弹窗处理

 

 

表单操作

表单里面会有文本框、密码框、下拉框、登陆框等。

这些涉及与页面的交互,比如输入、删除、点击等。

前提是找到页面中的元素。

例如下面有一个表单输入框:

            
            "
            
              text
            
            
              "
            
             name=
            
              "
            
            
              passwd
            
            
              "
            
             id=
            
              "
            
            
              passwd-id
            
            
              "
            
             />
          

获取这个元素的方法:

            element = driver.find_element_by_id(
            
              "
            
            
              passwd-id
            
            
              "
            
            
              )
element 
            
            = driver.find_element_by_name(
            
              "
            
            
              passwd
            
            
              "
            
            
              )
element 
            
            = driver.find_elements_by_tag_name(
            
              "
            
            
              input
            
            
              "
            
            
              )
element 
            
            = driver.find_element_by_xpath(
            
              "
            
            
              //input[@id='passwd-id']
            
            
              "
            
            )
          

注意:使用 xpath 的时候还需要注意的是,如果有多个元素匹配了 xpath,它只会返回第一个匹配的元素。如果没有找到,那么会抛出  NoSuchElementException  的异常。

 

获取元素之和就要进行输入与点击操作了

输入:

            element.send_keys(
            
              "
            
            
              some text
            
            
              "
            
            )
          

点击:

利用 Keys 这个类来模拟点击某个按键,当然首先你要获取按键元素。

            element.send_keys(
            
              "
            
            
              and some
            
            
              "
            
            , Keys.ARROW_DOWN)
          

第二种方法:我们获取了按键元素,我们就可以使用click方法点击了

            button = broswer.find_element_by_class_name(
            
              '
            
            
              btn-search
            
            
              '
            
            
              )

            
            
              #
            
            
              点击按钮
            
            
button.click() 
          

删除:

当你元素使用send.keys方法输入字符后,输入的内容不会自动清除,如果我们要输入第二次,就要把第一次的内容删除掉:

            element.clear()
          

 

上面都是简单的操作,如果我们遇到下拉框应该怎么办呢

 WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情。

可以根据索引来选择,可以根据值来选择,可以根据文字来选择。

            
              from
            
             selenium.webdriver.support.ui 
            
              import
            
            
               Select
select 
            
            = Select(driver.find_element_by_name(
            
              '
            
            
              name
            
            
              '
            
            
              ))
select.select_by_index(index)
select.select_by_visible_text(
            
            
              "
            
            
              text
            
            
              "
            
            
              )
select.select_by_value(value)
            
          

 

取消全部选择:

            select = Select(driver.find_element_by_id(
            
              '
            
            
              id
            
            
              '
            
            
              ))
select.deselect_all()
            
          

获取已选选择:

            select = Select(driver.find_element_by_xpath(
            
              "
            
            
              xpath
            
            
              "
            
            
              ))
all_selected_options 
            
            = select.all_selected_options
          

获取可选选项:

            options = select.options
          

 

最后提交表单:

            driver.find_element_by_id(
            
              "
            
            
              submit
            
            
              "
            
            ).click()
          

注意:WebDriver 会在表单中寻找它所在的表单,如果发现这个元素并没有被表单所包围,那么程序会抛出  NoSuchElementException  的异常。

 

 

元素拖拽

要完成元素的拖拽,首先你需要指定被拖动的元素和拖动目标元素,然后利用 ActionChains 类来实现。

            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).perform()
            
          

这样就实现了元素从 source 拖动到 target 的操作。

 

 

页面切换

一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:

            driver.switch_to_window(
            
              "
            
            
              windowName
            
            
              "
            
            )
          

另外你可以使用 window_handles 方法来获取每个窗口的操作对象。例如:

            
              for
            
             handle 
            
              in
            
            
               driver.window_handles:
    driver.switch_to_window(handle)
            
          

另外切换 frame 的方法如下

            driver.switch_to_frame(
            
              "
            
            
              frameName.0.child
            
            
              "
            
            )
          

这样焦点会切换到一个 name 为 child 的 frame 上。

 

弹窗处理

当你出发了某个事件之后,页面出现了弹窗提示,那么你怎样来处理这个提示或者获取提示信息呢?

            alert = driver.switch_to_alert()
          

通过上述方法可以获取弹窗对象。

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论