载入开车模块
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=‘路径‘)
driver.get(url)
进入开车模式
使用代理:
(1)
service_args = [
‘--proxy=%s‘ % ip_html, # 代理 IP:prot (eg:192.168.0.28:808)
‘--proxy-type=http’, # 代理类型:http/https
‘--load-images=no’, # 关闭图片加载(可选)
‘--disk-cache=yes’, # 开启缓存(可选)
‘--ignore-ssl-errors=true’ # 忽略https错误(可选)
]
driver = webdriver.PhantomJS(service_args=service_args)
(2)
from selenium import webdirver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152")
Cookies:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(https://www.zhihu.com/explore)
#添加cookie参数
driver.add_cookie({‘name‘:‘name‘,‘domain‘:‘www.zhihu.com‘,‘value‘:‘germey‘})
#删除全部cookie参数
driver.delete_all_cookie()
添加插件:
# 添加xpath helper应用
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
# 设置好应用扩展
extension_path = ‘D:/extension/XPath-Helper_v2.0.2.crx‘
chrome_options.add_extension(extension_path)
# 启动浏览器,并设置好wait
browser = webdriver.Chrome(chrome_options=chrome_options)
处理JavaScript,Ajax加载问题:
(1)隐式等待(网速问题):
from selenium import webdriver
driver = webdirver.Chrome()
driver.implicitily_wait(10)
driver.get(url)
content = driver.find_element_by_class_name(‘zu-top-add-question‘)
(2)设置智能/显示等待:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome()
driver.get(url)
try:
element = WebDriverWait(driver,10)
content = element.until(EC.presence_of_element_located((By.检索键名,‘键值‘)))
button = element.until(EC.element_to_be_clickable(By.CSS_selector,‘bin-search‘))
except NoSuchElementException:
print(‘找不到元素的异常‘)
详解:通过WebDriverWait(driver,超时时长,调用频率,忽略异常)
element.until(可执行的方法,超时返回的值)函数判断JavaScript是否加载
(3)强制等待:
import time
time.sleep(10)
(4)处理重定向:
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebElement
from selenium.common.except import StaleElementReferenceException
elem = driver.find_element_by_tag_name(‘html‘)
……执行等待时间
try:
elem == driver.find_element_by_tag_name(‘html‘)
except StaleElementReferenceException:
return
详解:通过检查javascript程序执行前标签值是否存在判断页面加载是否完整
执行整个网页的JavaScript:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
driver.execute_script(‘windown.scrollTo(0,documengt.body.scrollHeight)‘)
driver.execute_script(‘alert("To Bottom")‘)
鼠标操作:
导入模块:
from selenium.webdriver import ActionChains
操作action = ActionChains(driver):
action.click(on_element=None) ——单击鼠标左键
action.click_and_hold(on_element=None) ——点击鼠标左键,不松开
action.context_click(on_element=None) ——点击鼠标右键
action.double_click(on_element=None) ——双击鼠标左键
action.drag_and_drop(source, target).perform() ——拖拽到某个元素然后松开
action.drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
action.key_down(value, element=None) ——按下某个键盘上的键
action.key_up(value, element=None) ——松开某个键
action.move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
action.move_to_element(to_element) ——鼠标移动到某个元素
action.move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
action.perform() ——执行链中的所有动作
action.release(on_element=None) ——在某个元素位置松开鼠标左键
action.send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
action.send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
截图:
driver.get_screenshot_as_file(‘tmp/pythonscraping.png‘)
将主页的屏幕截图保存在本地的tmp 文件夹中(该文件夹必须创建好,以供正确存储之用)。截屏可保存为多种文件格式。
窗口最大化:
driver.maximize_window()
获取元素信息:
(1)
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chroms()
driver.get(url)
content = driver.find.element(By.ID,‘zh-top-link-logo‘)#定位
#属性:
herf = content.get_attribute(‘class‘)
#文本:
text = content.text()
#id:
num = content.id
#位置:
location = content.localtion
#标签名:
lable = content.tag_name
#大小:
size = content.size
(2)
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
# 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable_path:指定PhantomJS位置
driver = webdriver.PhantomJS(executable_path = r"D:\Program Files\phantomjs\bin\phantomjs")
# get()方法会一直等到页面被完全加载,然后才会继续程序
driver.get("http://www.baidu.com/")
# 获取页面名为wrapper的id标签的文本内容
data = driver.find_element_by_id("wrapper").text
# 打印获取的文本内容
print(data)
# 打印页面标题:百度一下,你就知道
print(driver.title)
# 生成当前页面快照并保存
driver.save_screenshot("baidu.jpg")
# 在百度搜索输入框中输入“蚂蚁”
driver.find_element_by_id("kw").send_keys("蚂蚁")
# 模拟点击“百度一下”按钮
driver.find_element_by_id("su").click()
# 等待2秒,让页面加载
time.sleep(2)
# 获取搜索后的页面快照
driver.save_screenshot("蚂蚁.jpg")
# 打印网页渲染后的源代码
# print(driver.page_source)
# 获取当前页面Cookie
print(driver.get_cookies())
# Ctrl + a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "a")
# Ctrl + x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "x")
# 输入框重新输入内容
driver.find_element_by_id("kw").send_keys("python")
# 模拟Enter回车键
driver.find_element_by_id("su").send_keys(Keys.ENTER)
# 等待2秒,让页面加载
time.sleep(2)
# 清除输入框内容
driver.find_element_by_id("kw").clear()
# 获取新的快照
driver.save_screenshot("python.jpg")
# 获取当前url
print(driver.current_url)
# 关闭当前页面,如果只有一个页面,会关闭浏览器
driver.close()
# 关闭浏览器
driver.quit()
Frame:(多表单切换处理)
很多时候定位元素时候总是提示元素定位不到的问题,明明元素就在那里,这个时候就要关注你所定位的元素是否在frame和iframe里面
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chroms()
driver.get(url)
driver.switch_to.find(‘frame的id值‘)#切换到frame
source = driver.find_element_by_css_selector(‘#值‘)#建立需要拖拽的对象
#找不到元素的异常
try:
logo = driver.find_element_by_class_name(‘logo‘)
except NoSuchElementException:
print(‘no logo‘)
#切换到父类frame
driver.switch_to.parent_frame()
logo = driver.find_element_by_css_name(‘logo‘)
浏览器前进后退、关闭:
from selenium import webdriver
driver.get(‘https://www.baidu.com‘)
driver.get(‘https://www.taobao.com‘)
driver.get(‘https://www.sogou.com/‘)
#后退
driver.back()
#前进
driver.forward()
#关闭
driver.close()
选项卡管理:
建立新的选项卡:
driver.execute_script(‘window.open()‘)
切换新的选项卡:
driver.switch_to_window(driver.window_handles[1])
driver.get(url)
切换回第一个选项卡
driver.switch_to_window(driver.window_handles[0])
driver.get(url)
异常:
from selenium.common.exceptions import TimeoutException,NoSuchElementException
TimeoutException 超时
NoSuchElementException 找不到元素
# Firefox headless模式运行
options = webdriver.FirefoxOptions()
options.add_argument(‘-headless‘)
self.driver = webdriver.Firefox(options=options)
self.driver.implicitly_wait(30)
# 设置Firefox下载exe格式的文件,不弹出下载窗,直接下载到指定路径
profile = webdriver.FirefoxProfile()
profile.set_preference(‘browser.download.dir‘, ‘d:\\‘)
profile.set_preference(‘browser.download.folderList‘, 2)
profile.set_preference(‘browser.download.manager.showWhenStarting‘, False)
# 参数 application/octet-stream 表示下载exe文件无需弹窗确认,直接下载
profile.set_preference(‘browser.helperApps.neverAsk.saveToDisk‘, ‘application/octet-stream‘)
#Firefox headless模式运行
options = webdriver.FirefoxOptions()
options.add_argument(‘-headless‘)
#实例化对象时,将设置的Firefox参数传入self.driver = webdriver.Firefox(firefox_profile=profile,options=options)self.driver.implicitly_wait(30)self.base_url = "https://www.baidu.com/"