selenium初体验:
from selenium import webdriver
from selenium.webdriver.common.by import By
#from selenium.webdriver.chrome.service import Service
#wd=webdriver.Chrome(service=Service(r'C:\newapp01\chromedriver\chromedriver.exe'))
wd=webdriver.Chrome() #将chromedriver.exe的目录放在环境变量中,即可不用调用service,直接调用浏览器
wd.get('https://www.baidu.com')
element=wd.find_element(By.ID,'kw') #找到input标签的的ID
#element.send_keys('通讯\n') #输入字符,\n回车键进行搜索
element.send_keys('花')
element=wd.find_element(By.ID,'su')
element.click()
input()
#wd.quit() #退出浏览器
注意:
pycharm可能找不到selenium模块
pip成功,pycharm识别不了”,这就是因为新建项目默认解释器是用“项目的解释器”的,
但是pip安装的第三方库是在python安装目录下,所以会识别不了。
所以要在pycharm的interpret中更换原始的解释器
选择元素:
from selenium import webdriver
from selenium.webdriver.common.by import By
wd=webdriver.Chrome()
wd.get('https://www.xinshipu.com/chuyoufenlei/')
#如果是find_elements返回的是列表,如果是find_element返回的是匹配的第一个元素
#若没有符合的元素则返回空列表
#By.TAG_NAME,选择所有的tag名为div的元素,依据标签进行匹配
elements=wd.find_elements(by=By.CLASS_NAME, value='r-name')
for element in elements:
print(element.text)
get_attribute用法:
element.get_attribute去获取标签的属性,
通过其的’outerHTML’属性获取对象所对应的整个html
通过其的‘innerHTML’获取某个元素的内部的HTML文本内容
获取输入框的文本
selenium新的定位方式参考博客
css表达式选择:css官方语法文档,参考博客
注意:
①逗号,相当于或||
②span:nth-child(2)表示拿到第二个span标签
span:nth-last-child(1)表示拿到最后一个span标签
③span:nth-of-type(2)表示选定的元素是父元素的第几个某类型(这里是span)的子节点
④+表示紧跟的兄弟节点,比如span+span,两个连在一起的兄弟节点span
Xpath和CSS常用语法的对比:
XPATH:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
wd=webdriver.Chrome() #将chromedriver.exe的目录放在环境变量中,即可不用调用service,直接调用浏览器
wd.get('https://www.baidu.com/')
element=wd.find_element(By.XPATH,'/html/body/div')
#上面以/开头表示从根开始,是绝对路径。若//开头表示全局匹配,*表示通配符
#比如//div//p 等价于css中div p ;//div/p等价于div>p
print(element.get_attribute('outerHTML'))
wd.quit()
几个注意的地方:
①选择id为hello的元素,可以//[@id=‘hello’]
②选择div中class为hello的元素,可以//div[@class=‘hello’]
③xpath可以根据次序选择元素,如//p[2] 即选择p类型的第二个子元素
④选择多个元素,如//div |//h1 等价与css中的div,h4
⑤xpath可以选择父节点,css不行。如//[@id=‘hello’]/…/…
⑥xpanth选择后续兄弟节点 following-sibling:: 等价于css选择器中的~
⑦xpanth可以选择前面的兄弟节点 preceding-sibling:: 而css中没有这样用法
⑧如果我们先找id为hello的元素,再通过WebElement对象,选择概预算怒内部的P元素,必须加.符号
即wd.get(‘https://www.xxx.com/’)
hello=wd.find_element(By.ID,‘hello’)
element=hello.find_element(BY.XPATH,‘.//p’)