1 安装
在python上安装selenium库(我用的pycharm, 直接在缺失的库名上按 Alt + 回车 就可以安装)
然后下载webdriver: http://chromedriver.storage.googleapis.com/index.html, 去2.45文件夹里面看notes.txt, 有chromedriver和chrome的对应关系. webdriver下载完后放到PATH变量覆盖的路径, 比如python的安装目录, C:\Windows等等等等.
----------ChromeDriver v2.45 (2018-12-10)----------
Supports Chrome v70-72
Resolved issue 1997: New Session is not spec compliant [[Pri-1]]
Resolved issue 2685: Should Assert that the chrome version is compatible [[Pri-2]]
Resolved issue 2677: Find Element command returns wrong error code when an invalid locator is used [[Pri-2]]
Resolved issue 2676: Some ChromeDriver status codes are wrong [[Pri-2]]
Resolved issue 2665: compile error in JS inside of WebViewImpl::DispatchTouchEventsForMouseEvents [[Pri-2]]
Resolved issue 2658: Window size commands should handle user prompts [[Pri-2]]
Resolved issue 2684: ChromeDriver doesn't start Chrome correctly with options.addArguments("user-data-dir=") [[Pri-3]]
Resolved issue 2688: Status command is not spec compliant [[Pri-3]]
Resolved issue 2654: Add support for strictFileInteractability [[Pri-]]
安装Chrome. Chrome内核的其它浏览器好像没用.
2 代码
browser = webdriver.Chrome()
browser.get('https://www.facebook.com/')
emailEle = WebDriverWait(self.browser, 2).until((lambda driver: browser.find_element_by_id('email')))
passwordEle = WebDriverWait(self.browser, 2).until((lambda driver: browser.find_element_by_id('pass')))
loginBtn = WebDriverWait(self.browser, 4).until((lambda driver: browser.find_element_by_id('u_0_l')))
emailEle.send_keys("abc")
passwordEle.send_keys("def")
loginBtn.click()
browser.close()
browser.quit()
2.1 Chrome中可以加参数指定Chrome浏览器的路径
2.2
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))
lamdba匿名函数,冒号坐标是参数,右边是返回值。
until子句的意思是 直到查找someId的结果不为空。
整句的意思是直到找到someId这个元素才停止等待。
2.3 元素定位的方式
WebDriver--定位元素的8种方式 - 单眼皮小眼睛 - 博客园
总结: [1]通过id, name, class, tag: 通过HTML代码理解一下位置
<tag id="id" name="name" style="class1 class2"></tag>
[2]通过超链接文字link定位
[3]使用XPath综合定位
driver.find_element_by_xpath(".//*[@id='divword']/input[7]").click()#登录, *表示任意tag
driver.find_element_by_xpath("html/body/div[4]/div/div[2]/div/div[3]/a[1]").click()#个人页面的发布课程操作
[4]使用css选择器 (css选择器很复杂, 自行百度)
许多tag.class#id加上关系运算符
2.4 父子、兄弟、相邻节点定位
Java selenium - 父子、兄弟、相邻节点定位方式详解 - 只能永远把艰辛的劳动看作是生命的必要;即使没有收获的指望,也能心平气静的继续耕种. - CSDN博客
..表示父节点 //div[contains(@id,'title:')]/..