1.安装chrome
google官网下载ubuntu用的chrome
打开下载文件的目录
sudo dpkg -i google-chrome-stable_current_amd64.deb
2.安装webdriver
(1)查找谷歌浏览器版本
右上角三个点 帮助 关于谷歌浏览器 101.0.4951.64
没有界面的话 google-chrome --version
关闭chrome自动更新!!!!
(2)下载对应版本的webdriver
https://sites.google.com/chromium.org/driver/
http://npm.taobao.org/mirrors/chromedriver/
找支持浏览器相应版本的最新版
是个zip文件 5MB左右
(3)安装
linux下:
解压获得chromedriver,unzip chromedriver_linux664.zip
把chromedriver添加到环境变量 把chromedriver移动到usr/bin下 sudo mv chromedriver /usr/bin
windows下:
解压得到chromedriver.exe
把chromedriver.exe存放在python下面的Scripts文件夹里面,否则会报错。
(4)检验
命令能显示weidriver版本
chromedriver --version
from selenium import webdriver
bro = webdriver.Chrome()
bro.get("https://dig.chouti.com/")
if __name__ == "__main__":
pass
0.打开网页
bro = webdriver.Chrome(options=bro_options)
bro.get("https://dig.chouti.com/")
1.获取网页信息
获取urldriver.current_url
获取cookiesdriver.get_cookies() #注意 一定是cookies
获取网页代码driver.page_source #注意对于动态加载的 先让网页滚动到最下方
2.操作
点击bro.find_element().click()
输入字符bro.find_element().send_keys()
输入按键
from selenium.webdriver.common.keys import Keys
bro.find_element().send_keys(Keys.ENTER)
滚动 bro.execute_script("window.scrollBy(0,3000)") #滚动windows 以加载所有内
截图bro.save_screenshot('a01.png')
变成byte存到数据库
3.给selenium加cookie
(1)登录获取cookies
selenium_cookie_list = bro.get_cookies()
获取cookies,注意是cookies,这个是name-value键值对的形式,转换成字典模式
(2)变成json存储在redis
(3)从redis获取cookies 从json变成字典,还要变会之前的name-value键值对的形式
cookies_list_for_selenium = []
for key in list(cookies_dict.keys()):
cookies_list_for_selenium.append( {'name':key,'value':cookies_dict[key]} )
(4)加cookies
bro.get("https://dig.chouti.com/")#加之前先打开session 如何打开空白session?
bro.delete_all_cookies() #删除原来所有的cookies
for i in range(len(selenium_cookie)):
bro.add_cookie(cookie_dict=selenium_cookie_list[i]) #cookie要一条条加,只能加在当前的session,所以加之前要先打开session
#一条cookies要拼装成 {'name':'abc','value':'123'}
bro.refresh()
bro.get("https://dig.chouti.com/")#再次打开session,这次是带着cookies的
4.执行Javascript
https://blog.csdn.net/yinlin330/article/details/82625454
from selenium import webdriver
driver=webdriver.Chrome()
driver.implicitly_wait(3)
driver.get("http://localhost/")
js = 'document.getElementsByClassName("site-nav-right fr")[0].childNodes[1].removeAttribute("target")'
driver.execute_script(js) #调用js方法,同时执行javascript脚本 手动修改当前页面的html
driver.find_element_by_link_text('登录').click()
driver.find_element_by_id("username").send_keys("yonghuming")
完整程序例子
------------------------------------------------------------------------------------------
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
import time
my_chrome_options = Options()
my_chrome_options.add_argument('--disable-gpu') #
bro = webdriver.Chrome(service=Service("./chromedriver.exe"), options=my_chrome_options) #用当前路径下的driver 或者放到path下 c:/python0310/script
bro.get(url)
bro.implicitly_wait(5) # 隐性等待 所有加载的控件 最多等待5秒
bro.find_element('id', 's-top-loginbtn').click()
bro.find_element('id', 'TANGRAM__PSP_11__userName').send_keys('asdfasdf') #.clear()
bro.find_element('id', 'TANGRAM__PSP_11__password').send_keys('1234')
bro.find_element('id', 'TANGRAM__PSP_11__submit').click()
bro.find_element('partial link text', '下一页').click() #很好用!!!!
bro.find_element('id', 's-top-loginbtn').get_attribute('style') # 获取属性
bro.find_element('id', 's-top-loginbtn').location # 获取位置
bro.find_element("xpath","//div[@id='J_goodsList']/ul[1]/li[3]/div[1]/div[@class='p-name p-name-type-2']/a[1]/em").text #获取标签text
bro.execute_script("alert('aha')") #执行JS代码
bro.execute_script("window.scrollBy(0,11542)") #滚动windows 以加载所有内容
# print(bro.page_source) #所有加载后的html
cookies = bro.get_cookies() #保存cookies
bro.close() #关闭浏览器
###等待###
1.强制等待 直接等待x秒
2.隐性等待 等待整个页面加载完 缺点是对于页面由ajax部分加载时,所需要的部分已经完成了 还需要等待整个网页加载完成 浪费时间
implictly_wait(10) 页面全部加载完就进行 最多等待10秒
3.显性等待等待某个组件加载完
#参数
bro_options = webdriver.ChromeOptions()
bro_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片 速度快
bro_options.add_experimental_option('excludeSwitches', ['enable-automation']) #去掉“chrome正受到自动测试软件的控制”
bro_options.add_argument("--disable-blink-features=AutomationControlled")#让window.navigator.webdriver变成false 反爬
#bro_options.add_argument('--headless') #无头
#bro_options.add_argument("start-maximized") # 初始化就最大化
selenium_bro = webdriver.Chrome(options=bro_options )
其他-------------------------------------------------------------------------
iframe标签用于html中的嵌套网页
selenium默认访问不了frame,用bro.switch_to.frame(frame_element)
bro.switch_to.frame(frame_id)
删除cookies
bro.delete_cookie(cookieName)
bro.delete_all_cookies()
1.隐式等待:driver.implicitly_wait()
driver = webdriver.Chrome()
driver.implicitly_wait(10) #获取元素时最多会等待10秒,作用于所有的元素 缺点是要等整个页面加载完
2.显示等待
selenium.webdriver.support.excepted_conditions期望的条件和selenium.webdriver.support.ui.webDriverWait 来配合完成
等待某个页面元素出现完成