selenium的requests实现

selenium的requests实现

准备工作

  • 你在做下面的练习之前应该具备

    • 安装好chrome,并通过chrome://version确认其版本号

    • 安装chromedriver并与你的chrome版本相匹配,下载路径如下

      https://registry.npmmirror.com/binary.html?path=chromedriver/
      
    • 你应该有一个python+ide(如pycharm)的环境,反正下面的示例是用这些来完成的。

    • 下好requests库,对语法不再阐述

关于chromedriver

  • 本质上是个web server

  • 在命令行启动chromedriver应该是如下提示

    cmd>chromedriver.exe
    Starting ChromeDriver 100.0.4896.20 (f9d71f93d32a6487809d6f35a9670c879fe97dfe-refs/branch-heads/4896@{#203}) on port 9515
    Only local connections are allowed.
    Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
    ChromeDriver was started successfully.
    
  • 放在那里不要关闭哦~

关于webdriver

  • 参阅:6.5的endpoint部分

    https://w3c.github.io/webdriver/#endpoints
    

开始

我就不封装了,你有兴趣自行封装

不一样的,打开浏览器

Method URI Template Command
POST /session New Session
  • 示例代码:以chrome为例

    import requests
    server_url = "http://127.0.0.1:9515/session" 
    session_data = {
        "desiredCapabilities":{
            "caps":{"browserName":"chrome"}   #此处可以变更浏览器类型,前提你启动了对应的chromedriver或者geckodriver等。
        }
    }
    session_req = requests.post(url=server_url,json=session_data)  #json传递
    
  • 是不是相当于selenium的api

    from selenium import webdriver
    driver = webdriver.Chrome()
    
  • 区别是?不需要安装selenium就可以通过api来调用了,当然会更麻烦,人家给你封装好了。

不一样的,输入网址

Method URI Template Command
POST /session New Session
POST /session/{session id}/url Navigate To
  • 示例代码

    import requests
    from time import sleep
    server_url = "http://127.0.0.1:9515/session"  #这个url不能以/结尾
    session_data = {
        "desiredCapabilities":{
            "caps":{"browserName":"chrome"}
        }
    }
    session_req = requests.post(url=server_url,json=session_data)  #此处不能是data
    # 打开网址
    session_id = session_req.json().get("sessionId")  #首先要获取sessionId,是后面操作的根基
    dest_url = "http://121.41.14.39:8088/index.html#/"  #比如你要打开这个网址
    get_url_data = {"url":dest_url}  #字典形式
    requests.post(server_url+"/"+session_id+"/url",json=get_url_data) #注意url的格式,跟ep对比
    
    
  • 是不是类似于selenium中的driver.get()

不一样的,输入,点击

Method URI Template Command
POST /session New Session
POST /session/{session id}/url Navigate To
POST /session/{session id}/element Find Element
POST /session/{session id}/element/{element id}/click Element Click
POST /session/{session id}/element/{element id}/value Element Send Keys
  • 示例代码

    import requests
    from time import sleep
    #登录
    # 1. 打开浏览器
    server_url = "http://127.0.0.1:9515/session"  #这个url不能以/结尾
    session_data = {
        "desiredCapabilities":{
            "caps":{"browserName":"chrome"}
        }
    }
    session_req = requests.post(url=server_url,json=session_data)  #此处不能是data
    # 2. 输入网址
    session_id = session_req.json().get("sessionId")
    dest_url = "http://106.14.1.150:8090/forum.php"  #这是我在阿里云部署的一个服务器
    get_url_data = {"url":dest_url}
    requests.post(server_url+"/"+session_id+"/url",json=get_url_data)
    
    # 简单封装下
    def get_eid(url,sid,method,method_value):  #获取elementid
        data = {"using":method,"value":method_value}
        return requests.post(url+"/"+sid+"/element",json=data).json().get("value").get("ELEMENT")
    def input_text(url,sid,eid,text): #在指定的元素上输入内容
        data = {"value":[text]}
        requests.post(url+"/"+sid+"/element/"+eid+"/value", json=data)
    def click_element(url,sid,eid): #点击指定的元素
        requests.post(url + "/" + sid + "/element/" + eid + "/click")
        
    # 3. 输入用户名
    # 3.1 获取用户名元素的elementid,通过id方式,其值为ls_username
    username_id = get_eid(server_url,session_id,"id","ls_username")
    input_text(server_url,session_id,username_id,"ruru023")
    sleep(2)
    # 3.2 获取密码元素的elementid,通过id方式,其值为ls_password
    password_id = get_eid(server_url,session_id,"id","ls_password")
    input_text(server_url,session_id,password_id,"123456")
    sleep(2)
    # 3.3 获取登录按钮元素的elementid,通过css selector方式,其值为.pn.vm
    login_button_id =  get_eid(server_url,session_id,"css selector",".pn.vm")
    click_element(server_url,session_id,login_button_id)
    
  • 类似于seleniumapi中的

    • webelement.send_keys()
    • webelement.click()
    • driver.find_element(By.ID,”ID_VALUE”)
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » selenium的requests实现