selenium自动化原理应用

1. selenium原理

1.1 使用selenium实现自动化测试,主要需要三部分
  1. 自动化测试代码, python+selenium(client),发送请求给浏览器的驱动
  2. 浏览器驱动:解析自动化代码,解析后把他们发送给浏览器
  3. 浏览器:执行浏览器驱动发来的指令,完成工程师想要的操作
1.2 selenium相关名词解释

webdriver: Controls a browser by sending commands to a remote server
RemoteConnection: A connection with the Remote WebDriver server
RemoteWebDriver: Controls a browser by sending commands to a remote server

1.3 selenium工作原理
  1. selenium client会先初始化一个service服务,通过WebDriver启动chromedriver.exe浏览器驱动程序,把启动的浏览器驱动服务作为WebDriver的remote server,
  2. 再通过RemoteWebDriver给发remote server送一个Command.NEW_SESSION的指令,去新建一个session即打开浏览器, 并获得获得sessionid, 如果再次对浏览器操作需要携带此ID
  3. 后续所有的selenium操作,都是通过RemoteConnection链接到remote server,发送对应的command指令(发送指令的过程就是使用execute()方法调用_request()方法通过urlib3向Remote Server发送HTTP请求)
  4. Remote Server收到HTTP请求后,解析请求,根据请求的内容驱动浏览器完成对应操作
  5. 浏览器再把操作后得到的结果数据作为HTTP Response的body通过驱动程序返回给测试脚本

2. 使用selenium驱动浏览器

  1. python+selenium实现打开百度浏览器,并搜索python
from selenium import webdriver
from selenium.webdriver.common.by import By

# 打开chrome浏览器
driver = webdriver.Chrome()
# 打开百度网址
driver.get('http://www.baidu.com')
time.sleep(5)
#找到搜索输入框并输入Python
driver.find_element(By.ID, 'kw').send_keys('Python')
#找到搜索按钮并点击搜索
driver.find_element(By.ID, 'su').click()
time.sleep(5)
driver.quit()
  1. 执行过程中的日志
DEBUG:selenium.webdriver.common.selenium_manager:Selenium Manager binary found at: /Users/chm/PycharmProjects/api_automaition_test/venv/lib/python3.9/site-packages/selenium/webdriver/common/macos/selenium-manager
DEBUG:selenium.webdriver.common.selenium_manager:Executing process: /Users/chm/PycharmProjects/api_automaition_test/venv/lib/python3.9/site-packages/selenium/webdriver/common/macos/selenium-manager --browser chrome --debug --output json
DEBUG:selenium.webdriver.common.selenium_manager:Found chromedriver 120.0.6099.109 in PATH: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.selenium_manager:chrome not found in PATH
DEBUG:selenium.webdriver.common.selenium_manager:chrome not found in the system
DEBUG:selenium.webdriver.common.selenium_manager:Required browser: chrome 120.0.6099.109
DEBUG:selenium.webdriver.common.selenium_manager:chrome 120.0.6099.109 already exists
DEBUG:selenium.webdriver.common.selenium_manager:chrome 120.0.6099.109 is available at /Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing
DEBUG:selenium.webdriver.common.selenium_manager:Required driver: chromedriver 120.0.6099.109
DEBUG:selenium.webdriver.common.selenium_manager:Driver path: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.selenium_manager:Browser path: /Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing
DEBUG:selenium.webdriver.common.selenium_manager:Using driver at: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.service:Started executable: `/Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver` in a child process with pid: 20830
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": null, "goog:chromeOptions": {"extensions": [], "binary": "/Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing", "args": []}}}}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:49839
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session HTTP/1.1" 200 892
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"120.0.6099.109","chrome":{"chromedriverVersion":"120.0.6099.109 (3419140ab665596f21b385ce136419fde0924272-refs/branch-heads/6099@{#1483})","userDataDir":"/var/folders/wm/vd_35pzd6176_q6l24x1bn2h0000gn/T/.org.chromium.Chromium.RCyQ0T"},"fedcm:accounts":true,"goog:chromeOptions":{"debuggerAddress":"localhost:49848"},"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platformName":"mac","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":true,"webauthn:extension:largeBlob":true,"webauthn:extension:minPinLength":true,"webauthn:extension:prf":true,"webauthn:virtualAuthenticators":true},"sessionId":"3ffd4652cd07597a0a713a53a55aa208"}} | headers=HTTPHeaderDict({'Content-Length': '892', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208/url {"url": "http://www.baidu.com"}
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session/3ffd4652cd07597a0a713a53a55aa208/url HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208/element {"using": "css selector", "value": "[id=\"kw\"]"}
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session/3ffd4652cd07597a0a713a53a55aa208/element HTTP/1.1" 200 94
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"element-6066-11e4-a52e-4f735466cecf":"933DB01416BB6CBBFCBCB080FEFE5692_element_7"}} | headers=HTTPHeaderDict({'Content-Length': '94', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208/element/933DB01416BB6CBBFCBCB080FEFE5692_element_7/value {"text": "Python", "value": ["P", "y", "t", "h", "o", "n"]}
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session/3ffd4652cd07597a0a713a53a55aa208/element/933DB01416BB6CBBFCBCB080FEFE5692_element_7/value HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208/element {"using": "css selector", "value": "[id=\"su\"]"}
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session/3ffd4652cd07597a0a713a53a55aa208/element HTTP/1.1" 200 95
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"element-6066-11e4-a52e-4f735466cecf":"933DB01416BB6CBBFCBCB080FEFE5692_element_23"}} | headers=HTTPHeaderDict({'Content-Length': '95', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208/element/933DB01416BB6CBBFCBCB080FEFE5692_element_23/click {}
DEBUG:urllib3.connectionpool:http://localhost:49839 "POST /session/3ffd4652cd07597a0a713a53a55aa208/element/933DB01416BB6CBBFCBCB080FEFE5692_element_23/click HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:DELETE http://localhost:49839/session/3ffd4652cd07597a0a713a53a55aa208 {}
DEBUG:urllib3.connectionpool:http://localhost:49839 "DELETE /session/3ffd4652cd07597a0a713a53a55aa208 HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request

3.原理应用一 - 通过execute(driver_command, params)来驱动浏览器

  1. excute发送命令,实现打开百度浏览器,并搜索python
# 开发时间:2024/1/8 18:48
import time
import logging

from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.by import By

logging.basicConfig(level=logging.DEBUG)
# 生成了一个浏览器驱动对象
# driver = webdriver.Chrome()
driver = WebDriver()
# driver.get('http://www.baidu.com')  # selenium调用了Command.GET命令,传递URL对应参数
driver.execute('get', {"url": 'http://www.baidu.com'})
time.sleep(1)
# driver.find_element(By.ID, 'kw').send_keys('Python')  # 通过find_element返回一个webElement对象,再去调用send_keys方法
el = driver.execute('findElement', {"using": 'css selector', "value": '[id="kw"]'})["value"]
el._execute('sendKeysToElement', {"text": "Python", "value": ["P", "y", "t", "h", "o", "n"]})

# driver.find_element(By.ID, 'su').click()
el1 = driver.execute('findElement', {"using": 'css selector', "value": '[id="su"]'})["value"]
el1._execute('clickElement')
time.sleep(5)
driver.quit()
  1. 执行日志
DEBUG:selenium.webdriver.common.selenium_manager:Selenium Manager binary found at: /Users/chm/PycharmProjects/api_automaition_test/venv/lib/python3.9/site-packages/selenium/webdriver/common/macos/selenium-manager
DEBUG:selenium.webdriver.common.selenium_manager:Executing process: /Users/chm/PycharmProjects/api_automaition_test/venv/lib/python3.9/site-packages/selenium/webdriver/common/macos/selenium-manager --browser chrome --debug --output json
DEBUG:selenium.webdriver.common.selenium_manager:Found chromedriver 120.0.6099.109 in PATH: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.selenium_manager:chrome not found in PATH
DEBUG:selenium.webdriver.common.selenium_manager:chrome not found in the system
DEBUG:selenium.webdriver.common.selenium_manager:Required browser: chrome 120.0.6099.109
DEBUG:selenium.webdriver.common.selenium_manager:chrome 120.0.6099.109 already exists
DEBUG:selenium.webdriver.common.selenium_manager:chrome 120.0.6099.109 is available at /Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing
DEBUG:selenium.webdriver.common.selenium_manager:Required driver: chromedriver 120.0.6099.109
DEBUG:selenium.webdriver.common.selenium_manager:Driver path: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.selenium_manager:Browser path: /Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing
DEBUG:selenium.webdriver.common.selenium_manager:Using driver at: /Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver
DEBUG:selenium.webdriver.common.service:Started executable: `/Users/chm/PycharmProjects/api_automaition_test/venv/bin/chromedriver` in a child process with pid: 4266
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session {"capabilities": {"firstMatch": [{}], "alwaysMatch": {"browserName": "chrome", "pageLoadStrategy": "normal", "browserVersion": null, "goog:chromeOptions": {"extensions": [], "binary": "/Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing", "args": []}}}}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:52665
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session HTTP/1.1" 200 892
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"120.0.6099.109","chrome":{"chromedriverVersion":"120.0.6099.109 (3419140ab665596f21b385ce136419fde0924272-refs/branch-heads/6099@{#1483})","userDataDir":"/var/folders/wm/vd_35pzd6176_q6l24x1bn2h0000gn/T/.org.chromium.Chromium.bLnOuK"},"fedcm:accounts":true,"goog:chromeOptions":{"debuggerAddress":"localhost:52670"},"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platformName":"mac","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:credBlob":true,"webauthn:extension:largeBlob":true,"webauthn:extension:minPinLength":true,"webauthn:extension:prf":true,"webauthn:virtualAuthenticators":true},"sessionId":"977f3edab226d7e3cac1a50e6a9cb1a1"}} | headers=HTTPHeaderDict({'Content-Length': '892', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1/url {"url": "http://www.baidu.com"}
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session/977f3edab226d7e3cac1a50e6a9cb1a1/url HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1/element {"using": "css selector", "value": "[id=\"kw\"]"}
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session/977f3edab226d7e3cac1a50e6a9cb1a1/element HTTP/1.1" 200 95
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"element-6066-11e4-a52e-4f735466cecf":"D8FCEFF5022E96524C90DB63CC2EF04A_element_11"}} | headers=HTTPHeaderDict({'Content-Length': '95', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1/element/D8FCEFF5022E96524C90DB63CC2EF04A_element_11/value {"text": "Python", "value": ["P", "y", "t", "h", "o", "n"]}
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session/977f3edab226d7e3cac1a50e6a9cb1a1/element/D8FCEFF5022E96524C90DB63CC2EF04A_element_11/value HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1/element {"using": "css selector", "value": "[id=\"su\"]"}
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session/977f3edab226d7e3cac1a50e6a9cb1a1/element HTTP/1.1" 200 95
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":{"element-6066-11e4-a52e-4f735466cecf":"D8FCEFF5022E96524C90DB63CC2EF04A_element_22"}} | headers=HTTPHeaderDict({'Content-Length': '95', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:POST http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1/element/D8FCEFF5022E96524C90DB63CC2EF04A_element_22/click {}
DEBUG:urllib3.connectionpool:http://localhost:52665 "POST /session/977f3edab226d7e3cac1a50e6a9cb1a1/element/D8FCEFF5022E96524C90DB63CC2EF04A_element_22/click HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request
DEBUG:selenium.webdriver.remote.remote_connection:DELETE http://localhost:52665/session/977f3edab226d7e3cac1a50e6a9cb1a1 {}
DEBUG:urllib3.connectionpool:http://localhost:52665 "DELETE /session/977f3edab226d7e3cac1a50e6a9cb1a1 HTTP/1.1" 200 14
DEBUG:selenium.webdriver.remote.remote_connection:Remote response: status=200 | data={"value":null} | headers=HTTPHeaderDict({'Content-Length': '14', 'Content-Type': 'application/json; charset=utf-8', 'cache-control': 'no-cache'})
DEBUG:selenium.webdriver.remote.remote_connection:Finished Request

3. 原理应用二 - 使用request来驱动浏览器

  1. 双击chromedriver程序,启动Chrome,默认的port为9515
Last login: Mon Jan  8 23:12:54 on ttys000
/Users/chm/Downloads/chromedriver-mac-x64/chromedriver ; exit;
 chm@mac  ~  /Users/chm/Downloads/chromedriver-mac-x64/chromedriver ; exit;
Starting ChromeDriver 120.0.6099.109 (3419140ab665596f21b385ce136419fde0924272-refs/branch-heads/6099@{#1483}) 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.
  1. 通过request库向chromedriver发送命令,实现打开百度浏览器,并搜索python
# 开发时间:2024/1/8 18:47
import logging
import time

import requests

logging.basicConfig(level=logging.DEBUG)
# 打开chrome浏览器
params = {"capabilities": {
    "firstMatch": [{}],
    "alwaysMatch": {"browserName": "chrome",
                    "pageLoadStrategy": "normal",
                    "platformName": "any",
                    "goog:chromeOptions": {"extensions": [],
                    "binary": "/Users/chm/.cache/selenium/chrome/mac-x64/120.0.6099.109/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",
                                           "args": []}
                    }},
    'desiredCapabilities': {'browserName': 'chrome',
                            'version': '',
                            'platform': 'ANY',
                            'goog:chromeOptions': {'extensions': [], 'args': []}}
    }

base_url = 'http://localhost:9515'
s = requests.Session()
res = s.request('POST', base_url+'/session', json=params)
# 获取sessionID值
sessionId = res.json()["value"]["sessionId"]

# 打开网址
datas1 = {'url': 'http://www.baidu.com'}
url1 = base_url + '/session/{}/url'.format(sessionId)
res1 = s.request("POST", url1, json=datas1)

time.sleep(1)

datas2 = {"using": "css selector", "value": "[id=\"kw\"]"}
url2 = base_url + '/session/{}/element'.format(sessionId)
res2 = s.request("POST", url2, json=datas2)
ele_id2 = res2.json()["value"].values()

# 搜索框输入python
datas3 = {"text": "Python", "value": ["P", "y", "t", "h", "o", "n"]}
url3 = base_url + '/session/{}/element/{}/value'.format(sessionId, *ele_id2)
res3 = s.request("POST", url3, json=datas3)

# 找到搜索按钮
datas4 = {"using": "css selector", "value": "[id=\"su\"]"}
url4 = base_url + '/session/{}/element'.format(sessionId)
res4 = s.request("POST", url4, json=datas4)
ele_id4 = res4.json()["value"].values()

# 点击搜索
datas5 = {}
url5 = base_url + '/session/{}/element/{}/click'.format(sessionId, *ele_id4)
res5 = s.request("POST", url5, json=datas5)

time.sleep(5)

datas6 = {}
url6 = base_url + '/session/{}'.format(sessionId)
res6 = s.request("DELETE", url6, json=datas6)

  1. 执行过程中的日志
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session HTTP/1.1" 200 892
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session/cee7ecbf02e39791b81055bf8ae7529b/url HTTP/1.1" 200 14
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session/cee7ecbf02e39791b81055bf8ae7529b/element HTTP/1.1" 200 94
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session/cee7ecbf02e39791b81055bf8ae7529b/element/E5745B30255BDE85A3F2536216CFEC9C_element_8/value HTTP/1.1" 200 14
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session/cee7ecbf02e39791b81055bf8ae7529b/element HTTP/1.1" 200 95
DEBUG:urllib3.connectionpool:http://localhost:9515 "POST /session/cee7ecbf02e39791b81055bf8ae7529b/element/E5745B30255BDE85A3F2536216CFEC9C_element_23/click HTTP/1.1" 200 14
DEBUG:urllib3.connectionpool:http://localhost:9515 "DELETE /session/cee7ecbf02e39791b81055bf8ae7529b HTTP/1.1" 200 14

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容