本文主要是介绍【第十二周第 3 节】:Selenium 基础(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第十二周-第三节课
selenium配置
-
execute_path
browser = webdriver.Chrome(executable_path=driver_path, chrome_options=chrome_options)
-
chrome_options
chrome浏览器的配置对象
https://peter.sh/experiments/chromium-command-line-switches/
-
添加代理
proxy = "127.0.0.1:8888" chrome_options.add_argument(f"--proxy-server={proxy}")
-
去除
navigator.webdriver
属性chrome_options.add_argument("disable-blink-features=AutomationControlled")
-
设置请求头
ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"chrome_options.add_argument(f"--user-agent={ua}")
-
无头模式
取消了页面渲染部分, 减少了资源消耗的同时, 增加了被反爬风险.
chrome_options.add_argument("--headless")
-
加载用户缓存
可以像我们正常使用浏览器一样, 记录使用记录和cookie.
如果不指定用户缓存的路径, 不指定的时候会创建临时文件夹.
如果selenium实例没有正常销毁, 那么当前缓存文件夹不会被删除, 长此以往会占用大量磁盘空间
chrome_options.add_argument(f"--user-data-dir={user_dir}")
-
加载插件
chrome_options.add_extension(插件路径)
-
执行JS
-
执行JS
browser.execute_script("return location.href")
-
在页面初始前注入JS
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: ()=> 'my_webdriver'})"""})
窗口操作
-
window
-
窗口的最大化
browser.maximize_window()
-
自定义窗口大小
browser.set_window_size(width=1660, height=960)
-
新建窗口
selenium框架是不提供新建窗口的方法的, 但是我们可以通过JS来控制新建一个窗口.
browser.execute_script("window.open('http://baidu.com')")
-
切换窗口
新建和删除窗口不会更改当前窗口的控制权, 需要通过切换窗口来控制.
browser.switch_to.window(self.browser.window_handles[-1])wind
-
-
frame
窗口中的嵌套document, 需要切换到frame环境下才可以解析
iframe = browser.find_element_by_css_selector(...) browser.switch_to.frame(iframe)# 切回原来的窗口环境 # 只要切换原来的窗口即可 browser.switch_to.window(self.browser.window_handles[index])
页面解析
-
通过CSS_SELECTOR
browser.find_element_by_css_selector
-
通过BeautifulSoup库
soup = BeautifulSoup(browser.page_source, 'lxml')
等待事件
-
time.sleep
-
WeDriverWait
和expected_conditions
https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.support.expected_conditions
等待事件本质就是根据
expected_conditions
进行轮询.from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC# 声明一个事件等待对象 waiter = WebDriverWait(browser, 10)
-
等待某个元素渲染完毕
waiter.until(EC.presence_of_element_located((By.ID, "myDynamicElement"))
-
等待当前元素在DOM可点击
waiter.until(EC.presence_to_be_clickable((By.ID, "myDynamicElement"))
-
模拟事件
-
ActionChains
行为链, 可以模拟连续的用户行为.
from selenium.webdriver import ActionChainsac = ActionChains(self.browser)
-
模拟鼠标输入
-
鼠标移动, 点击事件
# 将鼠标移动到某个元素上方 ac.move_to_element(search_button).click().perform()
-
根据相对位置移动鼠标
move_by_offset(x, y)
-
拖动元素
drag_and_drop
-
拖到元素到相对位置
drag_and_drop_by_offset
-
-
模拟键盘输入
https://selenium-python-zh.readthedocs.io/en/latest/api.html#module-selenium.webdriver.common.keys
-
模拟ENTER
from selenium.webdriver.common.keys import Keysac = ActionChains(self.browser) ac.send_keys(Keys.ENTER).perform()
-
这篇关于【第十二周第 3 节】:Selenium 基础(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!