初次使用:访问百度
from selenium import webdriver
import time
#创建浏览器对象,chrome浏览器对象
browser = webdriver.Chrome()
#让这个浏览器对象访问网址
url = "http://www.baidu.com"
browser.get(url)
#停留3秒
time.sleep(3)
#退出浏览器
browser.quit()
定位节点
定位百度的输入框输入内容并点击搜索按钮
from selenium import webdriver
from selenium.webdriver.common.by import By
#创建浏览器对象并访问一个网址
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
#定位输入框,并输入内容,find_element_by_xpath()已经被弃用了
#browser.find_element_by_xpath('//form/span/input[@id="kw"]').send_keys('广州天气')
#使用Xpath的方法定位输入框节点,找到之后
elem = browser.find_element(By.XPATH,'//form/span/input[@id="kw"]')
#使用send_keys(value)方法模拟键盘输入
elem.send_keys("广州天气")
#直接模拟在输入框内回车,不用再去找搜索按钮去点击了
elem.submit()
#点击搜索按钮
# browser.find_element(By.ID,"su").click()
browser.quit()
注意之前的方法browser.find_element_by_xpath()
已经弃用了,现在使用browser.find_element()
语法:find_element(by, value) by:查找的依据(根据什么属性来找),
比如"id", “class name”
value:属性或者标签名称具体的值,比如"a"
以下是定位方式与 By 中的属性对应清单:
使用的时候要导入By类:from selenium.webdriver.common.by import By
无界面浏览器
Chromedriver 每一次运行都要打开浏览器,并执行相应的输入、搜索等操作,这样会导致浏览器交互能力变差,浪费许多时间。 Selenium 为了增强浏览器的交互能力,允许您使用无头浏览器模式,也就是无界面浏览器。
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
#创建一个浏览器参数对象的实例
opts = webdriver.ChromeOptions()
#给这个参数对象添加需要的参数值
opts.add_argument('--headless') #浏览器不提供可视化界面,Linux下如果系统不支持可视化不加这条会启动失败
#创建浏览器对象,参数传递过去
browser = webdriver.Chrome(options=opts)
browser.get('https://www.baidu.com')
#找到百度首页的那个 百度一下 按钮
su=browser.find_element(by=By.ID,value="su")
print("title: ", browser.title) #输出浏览器的titile
print("按钮value: ",su.get_property("value")) #输出这个按钮元素的value值:百度一个
time.sleep(3)
#close()方法关闭的是当前浏览器对象正在操作的页面,如果当前浏览器窗口只有一个tab(就是只开了一个标签页)
#那么久相当于关闭了浏览器
browser.close()
#关闭所有界面
#quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,quit方法才是我们认为的完全关闭浏览器方法
browser.quit()
可以看到浏览器是正常工作的
执行JS脚本
WebDriver 提供了 execute_script() 方法来执行 JavaScript 代码,比如控制浏览器的滚动条。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://www.jd.com")
def fun0():
#滑动到最底部
# document.body.scrollHeight 是用来获取滚动条的高度
js = 'window.scrollTo(0, document.body.scrollHeight)'
driver.execute_script(js)
def fun1():
#滑动到指定的元素位置,前提是一次性加载完全的网页,不然找不到元素
target = driver.find_element(By.XPATH,'//*[@id="J_feeds"]/div/div[1]/div/h3')
driver.execute_script("arguments[0].scrollIntoView();", target) # 滑动到指定的元素位置
def fun2():
#使用 js 脚本缓慢拖动滚动条
js = "return document.body.scrollHeight"
# 获取滚动条的高度
new_height = driver.execute_script(js)
for i in range(0, new_height, 350):
time.sleep(0.5) #间隔0.5秒滚动一次
driver.execute_script('window.scrollTo(0, %s)' % i)
if __name__ == '__main__':
fun1()
time.sleep(5)
driver.quit()