Python 利用selenium 控制浏览器自动提交表单
Published:
Python 利用selenium 自动控制浏览器提交表单
前期准备
- 下载安装chrome webdriver
https://sites.google.com/chromium.org/driver/downloads?authuser=0
- 安装selenium
pip install seleuim
执行代码
- 如果有一些网站需要登录,可以执行以下命令启动一个常驻浏览器,并且将用户信息写到指定路径
# 针对macos 上的Chrome 浏览器
export PATH="/Applications/Google Chrome.app/Contents/MacOS:$PATH"
Google\ Chrome --remote-debugging-port=9222 --user-data-dir="~/ChromeProfile"
- 经过以上操作就会启动一个浏览器,后续使用代码可以控制该浏览器上的行为。
from selenium import webdriver # selenium.__version__ = 4.8.0
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
'''
如果想要保持登录状态:
打开一个terminal执行以下命令:
export PATH="/Applications/Google Chrome.app/Contents/MacOS:$PATH"
Google\ Chrome --remote-debugging-port=9222 --user-data-dir="~/ChromeProfile"
启动chrome驻留之后再执行以下代码
'''
# 打开浏览器驱动
option = webdriver.ChromeOptions()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# 启动浏览器
driver = webdriver.Chrome(options = option)
driver.implicitly_wait(10)
class ServiceConfig():
# 定义prepareWork函数,做准备工作
def prepareWork(self,url):
# 打开百度首页
driver.get(url)
# 查找搜索框元素
search_input = driver.find_element(By.XPATH,'//*[@id="root"]/div[1]/div[2]/div/div[2]/div[1]/div/div/div/input')
# 在搜索框中输入文本
search_input.send_keys("人体工学椅子")
# time.sleep(2)
# 点击搜索按钮
search_button = driver.find_element(By.XPATH,'//*[@id="root"]/div[1]/div[2]/div/div[2]/div[1]/div/button/span')
ActionChains(driver).move_to_element(search_button).click().perform()
# time.sleep(2)
setting_button = driver.find_element(By.XPATH,'//*[@id="root"]/div[2]/div/div[3]/div/div/div/div[1]/div[2]/p[1]')
ActionChains(driver).move_to_element(setting_button).click().perform()
# time.sleep(2)
windows = driver.window_handles
driver.switch_to.window(windows[-1])
sousuo_setting = driver.find_element(By.XPATH,'//*[@id="root"]/div[2]/div/div[3]/div[2]/div[5]/span[1]/button[1]/span')
ActionChains(driver).move_to_element(sousuo_setting).click().perform()
if __name__ == '__main__':
url = 'https://www.byte-mall.cn/'
sc = ServiceConfig()
sc.prepareWork(url)
time.sleep(10000)
- 具体其他复杂操作可以通过组合鼠标和键盘操作事件来实现