爬虫记(三) - Selenium

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:')]/..

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值