ide:pycharm
language:python 2.7
selenium:3.141.0
# coding=utf-8
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.chrome.options import Options
'''
// 在python的selenium中,ID,TAG_NAME,CLASS_NAME,NAME这四种最终都转为了css定位
class WebDriver(object):
def find_element(self, by=By.ID, value=None):
if self.w3c:
if by == By.ID:
by = By.CSS_SELECTOR
value = '[id="%s"]' % value
elif by == By.TAG_NAME:
by = By.CSS_SELECTOR
elif by == By.CLASS_NAME:
by = By.CSS_SELECTOR
value = ".%s" % value
elif by == By.NAME:
by = By.CSS_SELECTOR
value = '[name="%s"]' % value
...
'''
if __name__ == '__main__':
options = Options()
options.add_argument("--incognito")
path = "/Users/apple/Seleniumdriver/chromedriver"
driver = WebDriver(options=options,
service_log_path="log.txt")
driver.get("https://www.baidu.com")
# 下面是八种基本定位方法
# 1 id定位
selenium_id = driver.find_element_by_id("su") # selenium方式 by.id
js_id = driver.execute_script('return document.getElementById("su")') # js方式 document.getElementById("su")
if selenium_id != js_id:
assert False
# 2 name定位
selenium_name = driver.find_element_by_name("tj_trhao123") # selenium方式 by.name
js_name = driver.execute_script(
'return document.getElementsByName("tj_trhao123")[0]') # js方式 document.getElementsByName("tj_trhao123")[0]
if selenium_name != js_name:
assert False
# 3 classname定位
selenium_class_name = driver.find_element_by_class_name("s_ipt") # selenium方式 by.classname
js_class_name = driver.execute_script(
'return document.getElementsByClassName("s_ipt")[0]') # js方式 document.getElementsByClassName("s_ipt")[0]
if selenium_class_name != js_class_name:
assert False
# 4 tag_name 定位
selenium_tag_name = driver.find_element_by_tag_name("body") # selenium方式 by.tag_name
js_tag_name = driver.execute_script(
'return document.getElementsByTagName("body")[0]') # js方式 document.getElementsByTagName("body")[0]
if selenium_tag_name != js_tag_name:
assert False
# 5 link_text定位
selenium_link_text = driver.find_element_by_link_text("hao123") # selenium方式 by.link_text
# 无js的link_text定位方法
# 6 partial_link_text定位
driver.find_element_by_partial_link_text("hao") # selenium方式 by.partial_link_text
# 无js的partial_link_text定位方法
# 7 css定位
selenium_css = driver.find_element_by_css_selector("#kw") # selenium方式 by.css
js_css = driver.execute_script('return document.querySelector("#kw")') # js方式 document.querySelector("#kw")
if selenium_css != js_css:
assert False
selenium_css = driver.find_element_by_css_selector(".s_ipt")
js_css = driver.execute_script('return document.querySelector(".s_ipt")') # js方式 document.querySelector(".s_ipt")
if selenium_css != js_css:
assert False
selenium_css = driver.find_element_by_css_selector("span>input") # d
js_css = driver.execute_script(
'return document.querySelector("span>input")') # js方式 document.querySelector("span>input")
if selenium_css != js_css:
assert False
# 8 xpath定位
selenium_xpath = driver.find_element_by_xpath(
"//input[@maxlength='255']") # document.evaluate("//input[@maxlength='255']", document).iterateNext()
js_xpath_1 = driver.execute_script(
'return document.evaluate("//input[@maxlength=\'255\']", document).iterateNext()')
js_xpath_2 = driver.execute_script(
'return document.evaluate("//input[@maxlength=\'255\']", '
'document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0)')
if selenium_xpath != js_xpath_1 or selenium_xpath != js_xpath_2:
assert False
# 下面是复数定位方法
driver.find_elements_by_id("su") # 该方法无实际意义,标准html中不允许存在id相同的两个元素
if driver.find_elements_by_name("tj_trhao123") != driver.execute_script(
'return document.getElementsByName("tj_trhao123")'):
assert False
if driver.find_elements_by_class_name("s_ipt") != driver.execute_script(
'return document.getElementsByClassName("s_ipt")'):
assert False
driver.find_elements_by_tag_name("body")
driver.find_elements_by_link_text("hao123")
driver.find_elements_by_partial_link_text("hao")
if driver.find_elements_by_css_selector("#kw") != driver.execute_script('return document.querySelectorAll("#kw")'):
assert False
if driver.find_elements_by_css_selector(".s_ipt") != driver.execute_script(
'return document.querySelectorAll(".s_ipt")'):
assert False
if driver.find_elements_by_css_selector("span>input") != driver.execute_script(
'return document.querySelectorAll("span>input")'):
assert False
# 这是用js写的一个xpath复数定位方法
xpath = '''
function find_elements_by_xpath(path)
{
result = document.evaluate(path, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
var i = 0
var list = new Array()
while (result.snapshotItem(i) != null)
{
list.push(result.snapshotItem(i++))
}
return list
}
return find_elements_by_xpath("//input[@maxlength='255']")
'''
if driver.find_elements_by_xpath("//input[@maxlength='255']") != driver.execute_script(xpath):
assert False
driver.close()
driver.quit()
被简化的log.txt
[1557250080.306][INFO]: Starting ChromeDriver 74.0.3729.6
[1557250081.306][INFO]: Launching chrome: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[1557250082.314][INFO]: resolved localhost to ["::1","127.0.0.1"]
[1557250082.554][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE InitSession {
}
[1557250082.556][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND Navigate {
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"url": "https://www.baidu.com"
}
[1557250083.153][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE Navigate
[1557250083.154][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement { selenium id定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "id",
"value": "su"
}
[1557250083.168][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-1"
}
[1557250083.169][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js id定位
"args": [ ],
"script": "return document.getElementById(\"su\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.173][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-1"
}
[1557250083.175][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium name定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "name",
"value": "tj_trhao123"
}
[1557250083.188][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-2"
}
[1557250083.189][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js name定位
"args": [ ],
"script": "return document.getElementsByName(\"tj_trhao123\")[0]",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.194][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-2"
}
[1557250083.195][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium classname定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "class name",
"value": "s_ipt"
}
[1557250083.205][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.206][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js classname定位
"args": [ ],
"script": "return document.getElementsByClassName(\"s_ipt\")[0]",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.209][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.210][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium tagname定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "tag name",
"value": "body"
}
[1557250083.220][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-4"
}
[1557250083.221][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js tagname定位
"args": [ ],
"script": "return document.getElementsByTagName(\"body\")[0]",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.224][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-4"
}
[1557250083.225][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium linktext定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "link text",
"value": "hao123"
}
[1557250083.240][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-2"
}
[1557250083.241][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium partiallinktext定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "partial link text",
"value": "hao"
}
[1557250083.254][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-2"
}
[1557250083.255][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium css定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": "#kw"
}
[1557250083.264][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.265][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js css定位
"args": [ ],
"script": "return document.querySelector(\"#kw\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.269][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.270][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium css定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": ".s_ipt"
}
[1557250083.282][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.283][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js css定位
"args": [ ],
"script": "return document.querySelector(\".s_ipt\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.286][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.287][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium css定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": "span>input"
}
[1557250083.297][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.298][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js css定位
"args": [ ],
"script": "return document.querySelector(\"span>input\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.302][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.303][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElement {selenium xpath定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "xpath",
"value": "//input[@maxlength='255']"
}
[1557250083.313][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElement {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.314][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js xpath定位
"args": [ ],
"script": "return document.evaluate(\"//input[@maxlength='255']\", document).iterateNext()",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.318][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.319][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js xpath定位
"args": [ ],
"script": "return document.evaluate(\"//input[@maxlength='255']\", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0)",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.323][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript {
"ELEMENT": "0.885068976563621-3"
}
[1557250083.324][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium 复数id定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "id",
"value": "su"
}
[1557250083.333][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-1"
} ]
[1557250083.334][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements { selenium 复数name定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "name",
"value": "tj_trhao123"
}
[1557250083.344][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-2"
} ]
[1557250083.345][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js name定位
"args": [ ],
"script": "return document.getElementsByName(\"tj_trhao123\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.348][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-2"
} ]
[1557250083.349][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium 复数classname定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "class name",
"value": "s_ipt"
}
[1557250083.358][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.359][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js classname定位
"args": [ ],
"script": "return document.getElementsByClassName(\"s_ipt\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.363][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.364][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium 复数tagname定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "tag name",
"value": "body"
}
[1557250083.375][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-4"
} ]
[1557250083.376][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium 复数 linktext定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "link text",
"value": "hao123"
}
[1557250083.395][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-2"
} ]
[1557250083.396][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium 复数 partiallinktext定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "partial link text",
"value": "hao"
}
[1557250083.412][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-2"
} ]
[1557250083.413][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium css复数定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": "#kw"
}
[1557250083.422][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.423][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {js css复数定位
"args": [ ],
"script": "return document.querySelectorAll(\"#kw\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.427][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.428][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": ".s_ipt"
}
[1557250083.437][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.438][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {
"args": [ ],
"script": "return document.querySelectorAll(\".s_ipt\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.442][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.443][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "css selector",
"value": "span>input"
}
[1557250083.453][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-3"
}, {
"ELEMENT": "0.885068976563621-1"
} ]
[1557250083.454][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript {
"args": [ ],
"script": "return document.querySelectorAll(\"span>input\")",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.457][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-3"
}, {
"ELEMENT": "0.885068976563621-1"
} ]
[1557250083.459][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND FindElements {selenium xpath复数定位
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d",
"using": "xpath",
"value": "//input[@maxlength='255']"
}
[1557250083.469][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE FindElements [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.471][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND ExecuteScript { js xpath复数定位
"args": [ ],
"script": " \n function find_elements_by_xpath(path)\n {\n result = document.evaluate(path, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)\n var i = 0\n var list = new ...",
"sessionId": "d0dc0f20a38d8c9d468334cf924c2f6d"
}
[1557250083.481][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE ExecuteScript [ {
"ELEMENT": "0.885068976563621-3"
} ]
[1557250083.482][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] COMMAND CloseWindow {
}
[1557250083.617][INFO]: [d0dc0f20a38d8c9d468334cf924c2f6d] RESPONSE CloseWindow [ ]
以上代码在pycharm中调试通过。
网友评论