selenium可以直接可以用pip安装。
python -m pip install selenium
首先查看Chrome版本,在浏览器中输入chrome://version/
下载chromedriver的版本一定要与Chrome的版本一致。 有两个下载地址:
1、http://chromedriver.storage.googleapis.com/index.html
2、https://npm.taobao.org/mirrors/chromedriver/
解压压缩包,找到chromedriver.exe复制到chrome的安装目录(其实也可以随便放一个文件夹)。
不配置环境变量也可以,需要在脚本中指定
chrome_driver = r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
browser = webdriver.Chrome(executable_path = chrome_driver)
完成后在cmd下输入chromedriver验证是否安装成功.
测试
from selenium import webdriver
import time
def main():
#chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe' #chromedriver的文件位置
#browser = webdriver.Chrome(executable_path = chrome_driver)
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
time.sleep(5)
browser.quit()
'''
open url with chrome and right-click an element then select "Inspect"
go to "Elements" window and right-click the selected source code
then select "Copy", "Copy selector" or "Copy XPath" or "Copy full XPath"
'''
if __name__ == '__main__':
main()
chrome打开页面右击要定位的元素,选择Inspect(检视),会自动打开并定位到Elements(元素)页面源代码, 右击元素源代码可以选择复制,复制css选择器或XPath或full XPath等;
另外,如有页面跳转,请注意增加一定的延时或智能等待;
以某度为例 输入框
搜索按钮
准确定位的首选方式
可以直接在chrome中复制XPath,如 //*[@id="kw"]
find_element_by_xpath(r"//*[@id="kw"]")
一般不需要使用full XPath如 /html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
1.用 标签名 定位查找
driver.find_element_by_css_selector("input")
2.用 id 属性定位查找
driver.find_element_by_css_selector("kw")
3.用 class 属性定位查找
driver.find_element_by_css_selector("s_ipt")
4.其他属性定位
driver.find_element_by_css_selector("[name="wd"]")
1. 标签名及id属性值组合定位
driver.find_element_by_css_selector("input#kw")
2. 标签名及class属性值组合定位
driver.find_element_by_css_selector("input.s_ipt")
3. 标签名及属性(含属性值)组合定位
driver.find_element_by_css_selector("input[name="wd"]")
4. 标签及属性名组合定位
driver.find_element_by_css_selector("input[name]")
5. 多个属性组合定位
driver.find_element_by_css_selector("[class="s_ipt"][name="wd"]")
1. class拥有多个属性值,只匹配其中一个时
driver.find_element_by_css_selector("input[class ~= "bg"]")
2. 匹配以字符串开头的属性值
driver.find_element_by_css_selector("input[class ^= "bg"]")
3. 匹配以字符串结尾的属性值
driver.find_element_by_css_selector("input[class $= "s_btn"]")
4. 匹配被下划线分隔的属性值
driver.find_element_by_css_selector("input[class |= "s"]")
1.直接子元素层级关系,input为span的直接子元素(用 > 表示)
driver.find_element_by_css_selector(".bg.s_btn_wr > input") #class为bg和s_btn_wr 的span标签的子元素input
2.只要元素包含在父元素里面,不一定是直接子元素,用空格隔开,如图一所示,form 下面的 span 里面的input
driver.find_element_by_css_selector("#form input") #id是form的form标签里面的input标签
3.多级关系
driver.find_element_by_css_selector("#form > span > input") #id是form的form标签下面的span标签的下面的input标签
其他
直接填入元素的id即可 driver.find_element_by_id("kw")
填入元素的name值 driver.find_element_by_name("wd")
只对被a标签包围的标签有效
About Baidu
find_element_by_link_text("About Baidu")