日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python selenium 采坑

系統(tǒng) 1877 0

python selenium 采坑

系統(tǒng)環(huán)境:

python2
mac os 10.14.5

正文:

之前裝了一個(gè)firefox就可以完美使用selenium了,但是在firefox上進(jìn)行網(wǎng)頁(yè)檢查時(shí)不是很習(xí)慣。所以還是想使用chrome,但是由于selenium原生不支chrome,所以需要下載chrome driver并在生成selenium對(duì)象前把 chrome driver和chrome放到應(yīng)用程序路徑下,或者再初始化webdriver.Chrome對(duì)象時(shí)設(shè)置chrome driver和chrome的路徑。

            
              options 
              
                =
              
               webdriver
              
                .
              
              ChromeOptions
              
                (
              
              
                )
              
              
options
              
                .
              
              binary_location 
              
                =
              
               \
    
              
                "/Applications/Google Chrome .app/Contents/MacOS/Google Chrome"
              
              

browser 
              
                =
              
               webdriver
              
                .
              
              Chrome
              
                (
              
              DRIVER_BIN
              
                ,
              
               chrome_options
              
                =
              
              options
              
                )
              
            
          

初始化好browser后,剩下的所有操作都和這個(gè)browser對(duì)象有關(guān)了。
基本操作流程是:

  1. 第一步,通過(guò)browser對(duì)象的find_element*方法來(lái)查找到頁(yè)面中的element,常用的有如下方法:
    find_element_by_xpath()
    find_element_by_id()
    find_element_by_name()
  2. 這些find方法返回的都是一個(gè)或者一組element對(duì)象,接下來(lái)就是調(diào)用這些element對(duì)象的方法來(lái)實(shí)現(xiàn)賦值,和點(diǎn)擊等操作。常見(jiàn)的使用方法有click,send_keys等。
  3. 有時(shí)點(diǎn)擊某個(gè)按鈕或者鏈接會(huì)新開(kāi)一個(gè)頁(yè)面,這時(shí)就需要使用browser的switch_to方法和window_handles屬性了,如下面便是跳轉(zhuǎn)到第二個(gè)頁(yè)面:
            
                  browser
              
                .
              
              switch_to
              
                .
              
              window
              
                (
              
              browser
              
                .
              
              window_handles
              
                [
              
              
                1
              
              
                ]
              
              
                )
              
            
          

下面的代碼邏輯是登錄一個(gè)網(wǎng)站后,點(diǎn)擊button然后跳轉(zhuǎn)到新頁(yè)然后完成兩個(gè)表單的填寫和提交。

            
              
                #!/bin/python 
              
              
                from
              
               selenium 
              
                import
              
               webdriver

              
                from
              
               selenium
              
                .
              
              webdriver
              
                .
              
              common
              
                .
              
              keys 
              
                import
              
               Keys

              
                from
              
               selenium
              
                .
              
              webdriver
              
                .
              
              support
              
                .
              
              ui 
              
                import
              
               Select


              
                import
              
               os

              
                import
              
               time

PROJECT_ROOT 
              
                =
              
               os
              
                .
              
              path
              
                .
              
              abspath
              
                (
              
              os
              
                .
              
              path
              
                .
              
              dirname
              
                (
              
              __file__
              
                )
              
              
                )
              
              
DRIVER_BIN 
              
                =
              
               os
              
                .
              
              path
              
                .
              
              join
              
                (
              
              PROJECT_ROOT
              
                ,
              
              
                'bin/chromedriver'
              
              
                )
              
              
                # browser = webdriver.Chrome(executable_path=DRIVER_BIN)
              
              
                # initialize 
              
              
options 
              
                =
              
               webdriver
              
                .
              
              ChromeOptions
              
                (
              
              
                )
              
              
options
              
                .
              
              binary_location 
              
                =
              
               \
    
              
                "/Applications/Google Chrome .app/Contents/MacOS/Google Chrome"
              
              

browser 
              
                =
              
               webdriver
              
                .
              
              Chrome
              
                (
              
              DRIVER_BIN
              
                ,
              
               chrome_options
              
                =
              
              options
              
                )
              
              
browser
              
                .
              
              get
              
                (
              
              
                'https://172.16.50.253'
              
              
                )
              
              
                def
              
              
                element_send_keys
              
              
                (
              
              browser
              
                ,
              
               element
              
                ,
              
               keys
              
                )
              
              
                :
              
              
                try
              
              
                :
              
              
        element 
              
                =
              
               browser
              
                .
              
              find_element_by_id
              
                (
              
              element
              
                )
              
              
                except
              
               Exception
              
                :
              
              
                try
              
              
                :
              
              
            element 
              
                =
              
               browser
              
                .
              
              find_element_by_xpath
              
                (
              
              element
              
                )
              
              
                except
              
               Exception
              
                :
              
              
            element 
              
                =
              
               browser
              
                .
              
              find_element_by_name
              
                (
              
              element
              
                )
              
              
    element
              
                .
              
              send_keys
              
                (
              
              keys
              
                )
              
              
                def
              
              
                button_click
              
              
                (
              
              browser
              
                ,
              
               element
              
                ,
              
               action
              
                )
              
              
                :
              
              
    allowed_actions 
              
                =
              
              
                [
              
              
                'click'
              
              
                ,
              
              
                'touch'
              
              
                ]
              
              
                if
              
               action 
              
                not
              
              
                in
              
               allowed_actions
              
                :
              
              
                raise
              
               Exception
    
              
                try
              
              
                :
              
              
        element 
              
                =
              
               browser
              
                .
              
              find_element_by_id
              
                (
              
              element
              
                )
              
              
                except
              
               Exception
              
                :
              
              
        element 
              
                =
              
               browser
              
                .
              
              find_element_by_xpath
              
                (
              
              element
              
                )
              
              
    method 
              
                =
              
              
                getattr
              
              
                (
              
              element
              
                ,
              
               action
              
                )
              
              
    method
              
                (
              
              
                )
              
              
                # login
              
              
                def
              
              
                login
              
              
                (
              
              browser
              
                ,
              
               name
              
                ,
              
               passwd
              
                )
              
              
                :
              
              
    user_name 
              
                =
              
               browser
              
                .
              
              find_element_by_id
              
                (
              
              
                'id_username'
              
              
                )
              
              
    user_passwd 
              
                =
              
               browser
              
                .
              
              find_element_by_id
              
                (
              
              
                'id_password'
              
              
                )
              
              
    login_button 
              
                =
              
               browser
              
                .
              
              find_element_by_id
              
                (
              
              
                'loginBtn'
              
              
                )
              
              
    user_name
              
                .
              
              send_keys
              
                (
              
              name
              
                )
              
              
    user_passwd
              
                .
              
              send_keys
              
                (
              
              passwd
              
                )
              
              
    login_button
              
                .
              
              click
              
                (
              
              
                )
              
              
                # create project
              
              
                def
              
              
                create_project
              
              
                (
              
              browser
              
                ,
              
               project_name
              
                ,
              
               project_description
              
                )
              
              
                :
              
              
                # click Administrator
              
              
    admin_entry 
              
                =
              
              
                '//*[@id="navbar-collapse"]/ul[3]/a'
              
              
    admin_button 
              
                =
              
               browser
              
                .
              
              find_element_by_xpath
              
                (
              
              admin_entry
              
                )
              
              
    admin_button
              
                .
              
              click
              
                (
              
              
                )
              
              

    browser
              
                .
              
              switch_to
              
                .
              
              window
              
                (
              
              browser
              
                .
              
              window_handles
              
                [
              
              
                1
              
              
                ]
              
              
                )
              
              
                # click Account Centor
              
              
    account_entry 
              
                =
              
              
                '//*[@id="dashboard-slug-identity"]'
              
              
    account_button 
              
                =
              
               browser
              
                .
              
              find_element_by_xpath
              
                (
              
              account_entry
              
                )
              
              
    account_button
              
                .
              
              click
              
                (
              
              
                )
              
              
                # click project
              
              
    project_entry 
              
                =
              
              
                '//*[@id="sidebar-accordion-identity"]/li[1]/a'
              
              
    project_button 
              
                =
              
               browser
              
                .
              
              find_element_by_xpath
              
                (
              
              project_entry
              
                )
              
              
    project_button
              
                .
              
              click
              
                (
              
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                4
              
              
                )
              
              
                # click create project
              
              
    create_project_entry 
              
                =
              
              
                '//*[@id="content_body"]/div[1]/div/div/div[2]/hz-resource-panel/div/ng-transclude/hz-resource-table/hz-dynamic-table/hz-magic-search-context/div/div[1]/div/actions/action-list[1]/button'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               create_project_entry
              
                ,
              
              
                'click'
              
              
                )
              
              
                # fill the project form
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'name'
              
              
                ,
              
               project_name
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'description'
              
              
                ,
              
               project_description
              
                )
              
              

    sure_xpath 
              
                =
              
              
                '/html/body/div[1]/div/div/div[3]/button[2]/translate/span'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               sure_xpath
              
                ,
              
              
                'click'
              
              
                )
              
              
                # create user
              
              
                def
              
              
                create_user
              
              
                (
              
              browser
              
                ,
              
               name
              
                ,
              
               phone
              
                ,
              
               passwd
              
                ,
              
               rpasswd
              
                ,
              
               project
              
                ,
              
               realName
              
                ,
              
              
                email
              
                ,
              
               cardNumber
              
                ,
              
               organize
              
                )
              
              
                :
              
              
                # click Administrator
              
              
    admin_entry 
              
                =
              
              
                '//*[@id="navbar-collapse"]/ul[3]/a'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               admin_entry
              
                ,
              
              
                'click'
              
              
                )
              
              

    browser
              
                .
              
              switch_to
              
                .
              
              window
              
                (
              
              browser
              
                .
              
              window_handles
              
                [
              
              
                1
              
              
                ]
              
              
                )
              
              
                # click Account Centor
              
              
    account_entry 
              
                =
              
              
                '//*[@id="dashboard-slug-identity"]'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               account_entry
              
                ,
              
              
                'click'
              
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                2
              
              
                )
              
              
                # click user
              
              
    user_entry 
              
                =
              
              
                '//*[@id="sidebar-accordion-identity"]/li[2]/a'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               user_entry
              
                ,
              
              
                'click'
              
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                4
              
              
                )
              
              
                # click create project
              
              
    create_user_entry 
              
                =
              
              
                '//*[@id="content_body"]/div[1]/div/div/div[2]/hz-resource-panel/div/ng-transclude/hz-resource-table/hz-dynamic-table/hz-magic-search-context/div/div[1]/div/actions/action-list[1]/button'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               create_user_entry
              
                ,
              
              
                'click'
              
              
                )
              
              

    browser
              
                .
              
              switch_to
              
                .
              
              window
              
                (
              
              browser
              
                .
              
              window_handles
              
                [
              
              
                1
              
              
                ]
              
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'name'
              
              
                ,
              
               name
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'phone'
              
              
                ,
              
               phone
              
                )
              
              
    passwd_entry 
              
                =
              
              
                '//*[@id="password"]/div/input'
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
               passwd_entry
              
                ,
              
               passwd
              
                )
              
              
    rpasswd_entry 
              
                =
              
              
                '//*[@id="confirmPassword"]/div/input'
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
               rpasswd_entry
              
                ,
              
               rpasswd
              
                )
              
              

    time
              
                .
              
              sleep
              
                (
              
              
                3
              
              
                )
              
              
    project_btn 
              
                =
              
               Select
              
                (
              
              browser
              
                .
              
              find_element_by_name
              
                (
              
              
                'project'
              
              
                )
              
              
                )
              
              
    project_btn
              
                .
              
              select_by_visible_text
              
                (
              
              
                'hello_gxj'
              
              
                )
              
              

    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'realName'
              
              
                ,
              
               realName
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'email'
              
              
                ,
              
               email
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'cardNumber'
              
              
                ,
              
               cardNumber
              
                )
              
              
    element_send_keys
              
                (
              
              browser
              
                ,
              
              
                'organize'
              
              
                ,
              
               organize
              
                )
              
              

    submit_entry 
              
                =
              
              
                '/html/body/div[1]/div/div/div[3]/button[2]'
              
              
    button_click
              
                (
              
              browser
              
                ,
              
               submit_entry
              
                ,
              
              
                'click'
              
              
                )
              
              
                # create prepaid resource
              
              

login
              
                (
              
              browser
              
                ,
              
              
                'admin'
              
              
                ,
              
              
                'cloud'
              
              
                )
              
              
create_project
              
                (
              
              browser
              
                ,
              
              
                'hello_gxj'
              
              
                ,
              
              
                'gxj_test'
              
              
                )
              
              
create_user
              
                (
              
              browser
              
                ,
              
              
                'albert_guan'
              
              
                ,
              
              
                '188162081211'
              
              
                ,
              
              
                'cloudSH'
              
              
                ,
              
              
                'cloudSH'
              
              
                ,
              
              
                'albert'
              
              
                ,
              
              
                'albert'
              
              
                ,
              
              
                'albert@cloud.com'
              
              
                ,
              
              
                '111'
              
              
                ,
              
              
                '1111'
              
              
                )
              
              

time
              
                .
              
              sleep
              
                (
              
              
                300
              
              
                )
              
              
browser
              
                .
              
              close
              
                (
              
              
                )
              
              
browser
              
                .
              
              find


            
          

總結(jié):

雖然selenium提供了非常強(qiáng)大的python api能夠幫助我們輕松地去控制瀏覽器,實(shí)現(xiàn)網(wǎng)頁(yè)操作的自動(dòng)化,但是對(duì)于編碼不是很好以及經(jīng)常變化網(wǎng)頁(yè)html結(jié)構(gòu)的網(wǎng)頁(yè)而言,selenium也會(huì)喪失其操作上的便利性和可控性。對(duì)此而言就是巨大的業(yè)務(wù)開(kāi)發(fā)量和修改頻率。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 大荔县| 呼和浩特市| 长汀县| 靖远县| 镇安县| 广东省| 新郑市| 邵阳县| 金寨县| 曲阜市| 固阳县| 四子王旗| 冷水江市| 汉源县| 喜德县| 固始县| 满城县| 平果县| 吴桥县| 项城市| 红安县| 高平市| 康定县| 宣武区| 五河县| 东兴市| 九龙县| 搜索| 海晏县| 特克斯县| 赣榆县| 拜城县| 澄迈县| 清新县| 云阳县| 黄陵县| 个旧市| 甘孜| 明溪县| 阿巴嘎旗| 股票|