Selenium基础(爬虫基础_2)

文章目录

  • 1 selenium
    • 1.1 selenium了解
    • 1.2 使用步骤
    • 1.3 selenium的元素定位
    • 1.4 访问元素信息
    • 1.5 交互
  • 2 Chrome handless

1 selenium

1.1 selenium了解

什么是selenium?

(1)Selenium是一个用于Web应用程序测试的工具。
(2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。
(3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试。
(4)selenium也是支持无界面浏览器操作的。
作用:
模拟浏览器功能,自动执行网页中的js代码,实现动态加载

如何安装selenium?

  1. 操作谷歌浏览器驱动下载地址(大版本一致即可)
    http://chromedriver.storage.googleapis.com/index.html
    其他浏览器:

edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
火狐: https://github.com/mozilla/geckodriver/releases

  1. 查看谷歌浏览器版本
    谷歌浏览器右上角‐‐>帮助‐‐>关于
    在这里插入图片描述
  2. 下载selenium
    pip install selenium

1.2 使用步骤

#selenium的使用步骤?
#(1)导入:
from selenium import webdriver
#(2)创建谷歌浏览器操作对象:
path = '谷歌浏览器驱动文件路径'
browser = webdriver.Chrome(path)
#(3)访问网址
url = '要访问的网址'
browser.get(url)

1.3 selenium的元素定位

元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,
点击、输入等等。操作这些元素前首先
要找到它们,WebDriver提供很多定位元素的方法
方法:
	1,3,5方式最常用

# 1.find_element_by_id(id=‘su’)
	button = browser.find_element_by_id('su')
	
# 2.find_elements_by_name(name=‘wd’)
	name = browser.find_element_by_name('wd')
	
# 3.find_elements_by_xpath (标签名+id值)
	xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')
	
# 4.find_elements_by_tag_name (标签名)
	names = browser.find_elements_by_tag_name('input')
	
# 5.find_elements_by_css_selector (bs4)
	my_input = browser.find_elements_by_css_selector('#kw')[0]
	
# 6.find_elements_by_link_text(a标签)
	browser.find_element_by_link_text("新闻")

1.4 访问元素信息

获取元素属性
	.get_attribute('class')
	
获取元素文本
	.text
	
获取标签名
	.tag_name

1.5 交互

点击:
	click()
输入:
	send_keys()
后退操作:
	browser.back()
前进操作:
	browser.forword()
模拟JS滚动:
	js='document.documentElement.scrollTop=100000'
	browser.execute_script(js) 执行js代码
获取网页代码:
	page_source
退出:
	browser.quit()

2 Chrome handless

可以让你不打开UI界面的情况下使用 Chrome 浏览器,所以运行效果与 Chrome 保持完美一致

1.系统要求:
Chrome
	Unix\Linux 系统需要 chrome >= 59
	Windows 系统需要 chrome >= 60
	Python3.6及以上
	Selenium==3.4.*及以上
	ChromeDriver==2.31 及以上
	

2.配置:
	from selenium import webdriver
	from selenium.webdriver.chrome.options import Options
	chrome_options = Options()
	chrome_options.add_argument('‐‐headless')
	chrome_options.add_argument('‐‐disable‐gpu')
	# 日志的打印级别,禁用headless的默认输出
    chrome_options.add_argument('--log-level=3')
	#自己的谷歌安装路径
	path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
	chrome_options.binary_location = path
	browser = webdriver.Chrome(options=chrome_options)
	browser.get('http://www.baidu.com/')


3.配置封装:
	from selenium import webdriver
	#这个是浏览器自带的 不需要我们再做额外的操作
	from selenium.webdriver.chrome.options import Options
	def share_browser():
		#初始化
	    chrome_options = Options()
	    chrome_options.add_argument('--headless')
	    # 禁用GPU加速
	    chrome_options.add_argument('‐‐disable‐gpu')
	    # 日志的打印级别,禁用headless的默认输出
	    chrome_options.add_argument('--log-level=3')
	    # 如果“--log-level”不起作用,在加上:options.add_experimental_option('excludeSwitches', ['enable-logging'])
	
	    #浏览器的安装路径 打开文件位置
	    #这个路径是你谷歌浏览器的路径
	    path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
	    chrome_options.binary_location = path
	    browser = webdriver.Chrome(options=chrome_options)
	    return browser
	封装调用:
	from handless import share_browser
	browser = share_browser()
	browser.get('http://www.baidu.com/')
	#拍一张快照
	browser.save_screenshot('handless1.png')

常用options参数

options.add_argument('--disable-infobars')  # 禁止策略化

options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错

options.add_argument('window-size=1920x3000')  # 指定浏览器分辨率

options.add_argument('--disable-gpu')  # 谷歌禁用GPU加速

options.add_argument('--incognito')  # 隐身模式(无痕模式)

options.add_argument('--disable-javascript')  # 禁用javascript

options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错

options.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面

options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度

options.add_argument('--headless')  # 浏览器不提供可视化页面(无头模式). linux下如果系统不支持可视化不加这条会启动失败

options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  # 手动指定使用的浏览器位置

chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  #调用原来的浏览器,不用再次登录即可重启

options.add_argument('lang=en_US') # 设置语言

options.add_argument('User-Agent=Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36')

prefs = {"":""}

prefs["credentials_enable_service"] = False

prefs["profile.password_manager_enabled"] = False

chrome_option_set.add_experimental_option("prefs", prefs) # 屏蔽'保存密码'提示框

针对chrome76版本及以上版本,需要去掉Chrome提示受到自动软件控制使用:

option.add_argument('disable-infobars') #去掉Chrome提示受到自动软件控制

在chrome76版本及以上版本,需要使用

chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])   #以开发者模式启动调试chrome,可以去掉提示受到自动软件控制
chrome_options.add_experimental_option('useAutomationExtension', False)            #去掉提示以开发者模式调用

chrome_options.add_argument('--kiosk-printing')       #这样就可以静默打印,直接使用默认打印机进行打印。如需是Chrome全屏+静默打印: 使用" --kiosk --kiosk-printing" :浏览器默认是全屏显示,而且Esc、F11和鼠标右键都无法使用,在软件编程时,使用JS调用浏览器打印功能时,会跳过打印预览,直接进行打印操作。

你可能感兴趣的:(爬虫,selenium,python)