引入包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import warnings
warnings.filterwarnings('ignore')
获取页面信息
browser = webdriver.Chrome()
try:
browser.get('https://www.baidu.com')
minput = browser.find_element_by_id('kw')
minput.send_keys('Python')
minput.send_keys(Keys.ENTER)
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, 'content_left')))
print(browser.current_url)
print(browser.page_source)
finally:
browser.close()
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python&rsv_t=4494CH8jpjgbjlRZkunjhq6O3WHY2YTARmmPELAD%2BNkMJAof0O46OpN6iVs&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug2=0&inputT=196&rsv_sug4=196
...
获取节点信息
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
minput = browser.find_element_by_class_name("Tabs-link")
print(minput.id)
print(minput.location)
print(minput.tag_name)
print(minput.size)
print(minput.text)
print(minput.get_attribute('class'))
browser.close()
0.8341877833952027-1
{'x': 120, 'y': 1}
a
{'height': 50, 'width': 30}
首页
Tabs-link AppHeader-TabsLink
执行js
单页面操作实例
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 拉到最底
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("666")')
time.sleep(3)
# 打印alert具体内容
print(browser.switch_to.alert.text)
# 相当于点击确定键
browser.switch_to.alert.accept()
browser.close()
666
多页面操作实例
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 新开选项卡
browser.execute_script('window.open()')
print(browser.window_handles)
# 切换选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(3)
browser.switch_to_window(browser.window_handles[0])
browser.close()
['CDwindow-DD4B5FC447944E524A9E54AF1C02AA72', 'CDwindow-C8597E16C08D3C7385DDE880F11F7811']
延时等待
隐式等待
有点笨拙的一个方法,查找某个元素时,如果没找到,就先等待一下这么久再查找,如果再找不到就报错了。等待时间是固定的,因此很不灵活。
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
minput = browser.find_element_by_class_name("Tabs-link")
browser.close()
显式等待
这里的等待时间不再是固定等待时间,而是最长的等待时间,爬虫将一直尝试网页是否满足某个条件直到超出这个时间为止。在隐式等待中,满足条件只有元素出现这一种,而显式等待里的条件则更加丰富,比如可见、可以点击等等。
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.taobao.com')
wait = WebDriverWait(browser, 10)
# 等待到节点出现
minput = wait.until(EC.presence_of_element_located((By.ID, 'q')))
# 等待到节点可点击
mbutton = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(minput, mbutton)
browser.close()
<selenium.webdriver.remote.webelement.WebElement (session="3cd7ee1ba7451e815b4277a8b442e123", element="0.8261872481261998-1")> <selenium.webdriver.remote.webelement.WebElement (session="3cd7ee1ba7451e815b4277a8b442e123", element="0.8261872481261998-2")>
前进与后退
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
minput = browser.find_element_by_id('kw')
minput.send_keys('Python')
minput.send_keys(Keys.ENTER)
time.sleep(3)
# 返回首页
browser.back()
time.sleep(3)
# 回到搜索页
browser.forward()
time.sleep(3)
browser.close()
对Cookies进行操作
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 获取cookie
print(browser.get_cookies())
# 更新cookie
browser.add_cookie({'name':'user', 'value':'kkk'})
print(browser.get_cookies())
# 删除cookie
print(browser.delete_all_cookies())
print(browser.get_cookies())
[{'domain': '.baidu.com', 'expiry': 3734016002.137557, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1586532355'}, {'domain': '.baidu.com', 'expiry': 3734016002.137539, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14FA2C61D226D9583E3'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '30973_1458_31125_21126_30826_31186_31271_30823_31163'}, {'domain': '.baidu.com', 'expiry': 1618068355.137576, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14F56406BF9C9E3ABE8:FG=1'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}, {'domain': 'www.baidu.com', 'expiry': 1587396355, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
[{'domain': '.baidu.com', 'expiry': 3734016002.137557, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1586532355'}, {'domain': '.baidu.com', 'expiry': 3734016002.137539, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14FA2C61D226D9583E3'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '30973_1458_31125_21126_30826_31186_31271_30823_31163'}, {'domain': '.baidu.com', 'expiry': 1618068355.137576, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '5675A4F35DA2F14F56406BF9C9E3ABE8:FG=1'}, {'domain': 'www.baidu.com', 'expiry': 2217252356, 'httpOnly': False, 'name': 'user', 'path': '/', 'secure': True, 'value': 'kkk'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}, {'domain': 'www.baidu.com', 'expiry': 1587396355, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
None
[]
使用代理
proxy = "http://123.163.27.237:9999"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server='+proxy)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://httpbin.org/get')