Selenium

注意自己使用的是百分浏览器,在安装Chromedriver的时候始终有问题,后来改安装Chrome浏览器以后,解决了问题。关键点就是Chromedriver要放在和python同级的目录下。

完全模拟浏览器的操作。

虽然在使用requests的时候已经能够完成网页源代码的获取,但是在涉及到网页翻页或者加载Ajax等需要浏览器来实现的特殊功能的时候就需要用到Selenium库。

访问页面

from selenium import webdriver
browser = webdriver.Chrome()

browser.get("https://www.sogou.com/")
print(browser.page_source)
browser.close()

上述代码运行后,会自动打开Chrome浏览器,并打印百度首页的源代码,然后关闭浏览器

 查找元素

查找单个元素

详见:http://www.cnblogs.com/MrCandy/p/4230031.html

selenium对web各元素的操作首先就要先定位元素,定位元素的方法主要有以下几种:

  • 通过id定位元素:find_element_by_id("id_vaule")
  • 通过name定位元素:find_element_by_name("name_vaule")
  • 通过tag_name定位元素:find_element_by_tag_name("tag_name_vaule")
  • 通过class_name定位元素:find_element_by_class_name("class_name")
  • 通过css定位元素:find_element_by_css_selector();用css定位是比较灵活的
  • 通过xpath定位元素:find_element_by_xpath("xpath")
  • 通过link:find_element_by_link_text("text_vaule")或者find_element_by_partial_link_text()

以百度首页为例:下面是百度输入框的html代码,可以通过谷歌的审查元素或得

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

那么就可以

from selenium import webdriver
browser = webdriver.Chrome()

browser.get("https://www.baidu.com/")
input_first=browser.find_element_by_id("kw")
#CSS定位
input_second=browser.find_element_by_css_selector("#kw")#这就好比老师在讲前端的时候使用的便捷操作符,id是#,class是.

#XPATH定位
input_third=browser.find_element_by_xpath("//input[@id='kw']")#注意这里的'kw'只能是单引号
print(input_first)
print(input_second)
print(input_third)
browser.close()

CSS定位详解:

https://www.cnblogs.com/yoyoketang/p/6128580.html

Xpath定位详解:

XPath是一种在XML文档中定位元素的语言。

Xpth和CSS定位的对比

查找多个元素

查找多个元素和查找单个元素的方法一样,具体示例如下:

from selenium import webdriver
browser = webdriver.Chrome()

browser.get("https://www.taobao.com/")
css_1=browser.find_elements_by_css_selector(".layer")#找到所有class是layer的标签
print(css_1)
for i in css_1:
    print(i)
browser.close()

当然还有其他方法

find_elements_by_name
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

元素交互操作

对于获取的元素调用交互方法

 实现功能:首先在淘宝的搜索框里面输入“ipad",1秒后清空,接着输入”iphone“开始搜索。

from selenium import webdriver
import time
broswer=webdriver.Chrome()
broswer.get("https://www.taobao.com")

input_str=broswer.find_element_by_id("q")
input_str.send_keys("ipad")
time.sleep(1)

input_str.clear()
input_str.send_keys("iphone")
button=broswer.find_element_by_class_name("btn-search")#注意这里本来是class="btn-search tb-bg",但是tb-bg前面这个空格比较麻烦,所以索性只写btn-search即可
button.click()

交互动作-ActionChains

参考:https://www.cnblogs.com/lunvo/p/9182965.html

ActionChains是一个动作链,主要用于鼠标在浏览器上的复杂操作。

ActionChains是自动执行低级交互的一种方式,例如:鼠标移动,鼠标点按,键盘操作,文本操作等。

当我们调用这里的方法时,这些操作会被先储存在一个队列中,当我们调用perform()方法时,队列中的操作会被按顺序执行,执行后队列被清空。

from selenium import webdriver
from selenium.webdriver import ActionChains
broswer=webdriver.Chrome()
broswer.get("https://www.sina.com.cn")
sinanews=broswer.find_elements_by_css_selector("a[title='新闻']")

#定义ActionChains
actions=ActionChains(broswer)

#将鼠标移动到新浪新闻上点击
actions.click(sinanews).perform()

#在新浪新闻的搜索页面中的搜索框内搜索
actions=ActionChains(broswer)
input_str=broswer.find_elements_by_css_selector(".cheadSeaKey")
button=broswer.find_elements_by_css_selector(".cheadSeaSmt")
actions.click(input_str).perform()

actions.send_keys("iphone").perform()
actions.click(button).perform()

 

 

 

 

 

 

 

posted @ 2019-05-15 22:11  舒畅123  阅读(109)  评论(0编辑  收藏  举报