这篇文章主要介绍“python selenium模拟点击问题怎么解决”,在日常操作中,相信很多人在python selenium模拟点击问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python selenium模拟点击问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、安装谷歌浏览器
#下载包wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb#安装包,用deb方式安装sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb#######################分割################################若出现Packet xxx is not installed,代表依赖出现问题执行以下命令apt-get install -f#重新执行一遍sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb#######################分割###############################为了让其能够无界面运行sudo apt-get install xvfb
2、安装浏览器驱动
#首先获取chromedriver的最新版本信息LATEST=$(wget -q -O - http://chromedriver.storage.googleapis.com/LATEST_RELEASE)#下载 wget http://chromedriver.storage.googleapis.com/$LATEST/chromedriver_linux64.zip #解压unzip chromedriver_linux64.zip #如果没有安装unzip就运行 apt install unzip#权限配置chmod +x chromedriver #移动到bin目录下sudo mv chromedriver /usr/bin/
3、安装selenium
#看自己系统是不是pip3,-i表示用什么源下载pip3 install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
4、简单测试
首先创建test.py文件,之后执行python3 test.py
,查看效果
#coding=utf-8from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_opt = Options() # 创建参数设置对象.chrome_opt.add_argument('--headless') # 无界面化.chrome_opt.add_argument('--disable-gpu') # 配合上面的无界面化.chrome_opt.add_argument('--window-size=1366,768') # 设置窗口大小, 窗口大小会有影响.chrome_opt.add_argument("--no-sandbox") #使用沙盒模式运行# 创建Chrome对象并传入设置信息.browser = webdriver.Chrome(chrome_options=chrome_opt)url = "https://www.baidu.com/"browser.get(url)print(browser.page_source)browser.quit()
5、打卡程序
这里我先用浏览器插件的Selenium先点击好导出python文件进行修改。程序需要创建data.csv
文件,并在其中写入账号密码
# Generated by Selenium IDEimport sysimport timefrom selenium import webdriverfrom selenium.webdriver.common.by import By# 读取数据函数userList = []def readData(): with open("data.csv","r") as f: for lines in f.readlines(): data = lines.strip().split(",") userList.append(data)# 全局函数def printLog(info): print('{0} {1}'.format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),info))# 打卡类class Test: # 初始化浏览器 def __init__(self): # 添加 Chrome 相关配置 options = webdriver.ChromeOptions() # 指定设备名称即可 options.add_experimental_option('mobileEmulation', {'deviceName': 'iPhone X'}) options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # options.add_argument('--headless') self.driver = webdriver.Chrome(chrome_options=options) # => 打开浏览器时加入配置 printLog("浏览器初始化完成") # 正式打卡 def signIn(self,username,password): printLog("正在打开网页") self.driver.get("http://stu.zstu.edu.cn/webroot/decision/url/mobile?origin=53fd9573-139e-4e3b-9357-4d791849ad58#/login") # 睡眠控制速度 # 刷新页面 self.driver.refresh() time.sleep(3) self.driver.set_window_size(800, 824) self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div/div/div/div/div/div/div/div[2]/div[2]/div[1]/div/input").click() self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div/div/div/div/div/div/div/div[2]/div[2]/div[1]/div/input").send_keys(username) self.driver.find_element(By.XPATH, "//input[@type=\'password\']").click() self.driver.find_element(By.XPATH, "//input[@type=\'password\']").send_keys(password) time.sleep(3) self.driver.find_element(By.CSS_SELECTOR,".r-1loqt21:nth-child(4)").click() time.sleep(4) printLog("登录成功") # 寻找打卡功能模块 self.driver.find_element(By.CSS_SELECTOR,".r-1loqt21:nth-child(2)").click() time.sleep(2) printLog("开始打卡") self.driver.find_element(By.CSS_SELECTOR, "#col_3_row_6 .css-901oao").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[34]/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#col_4_row_6 > div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[2]/div/div[2]/div/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#col_5_row_6 > div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[2]/div/div[6]/div/div/div").click() time.sleep(1) self.driver.find_element(By.CSS_SELECTOR, "#col_3_row_7 .css-1cwyjr8").click() self.driver.find_element(By.CSS_SELECTOR, "#col_3_row_7 .css-1cwyjr8").send_keys("浙江理工大学") printLog("打卡进行中") #选项,不知道为什么css定位不能用 self.driver.find_element(By.XPATH, "//div[10]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[12]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[13]/div/div/div/div/div/div/div[2]").click() self.driver.find_element(By.XPATH, "//div[17]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[18]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[19]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[20]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[21]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[23]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[25]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[26]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[28]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[30]/div/div/div/div/div[2]/div/div").click() time.sleep(1) #提交 self.driver.find_element(By.CSS_SELECTOR, "#col_1_row_39").click() time.sleep(10) printLog("本次打卡成功") def quit(self): self.driver.quit() printLog("浏览器退出")if __name__ == '__main__': test = Test() readData() for i in range(len(userList)): try: test.signIn(userList[i][0],userList[i][1]) except: printLog("打卡成功或者系统bug,正在进行下一个") continue test.quit() printLog("今日打卡任务完成") sys.exit()
6、linux设置定时任务
#上传代码后,设置定时crontab -e #打开后添加以下记录,代表每天3点执行0 3 * * * /usr/bin/python3 /home/shawn/ezl/sign.py > /home/shawn/ezl/elog.log 2>&1#重启systemctl restart cron.service
7、其他
上面部分为研究生打开,下面为本科生
# Generated by Selenium IDEimport sysimport timefrom selenium import webdriverfrom selenium.webdriver.common.by import By# 读取数据函数userList = []def readData(): with open("data.csv","r") as f: for lines in f.readlines(): data = lines.strip().split(",") userList.append(data)# 全局函数def printLog(info): print('{0} {1}'.format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),info))# 打卡类class Test: # 初始化浏览器 def __init__(self): # 添加 Chrome 相关配置 options = webdriver.ChromeOptions() # 指定设备名称即可 options.add_experimental_option('mobileEmulation', {'deviceName': 'iPhone X'}) options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--headless') self.driver = webdriver.Chrome(chrome_options=options) # => 打开浏览器时加入配置 printLog("浏览器初始化完成") # 正式打卡 def signIn(self,username,password): printLog("正在打开网页") self.driver.get("http://stu.zstu.edu.cn/webroot/decision/url/mobile?origin=53fd9573-139e-4e3b-9357-4d791849ad58#/login") # 睡眠控制速度 # 刷新页面 self.driver.refresh() time.sleep(3) self.driver.set_window_size(800, 824) self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div/div/div/div/div/div/div/div[2]/div[2]/div[1]/div/input").click() self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div/div/div/div/div/div/div/div[2]/div[2]/div[1]/div/input").send_keys(username) self.driver.find_element(By.XPATH, "//input[@type=\'password\']").click() self.driver.find_element(By.XPATH, "//input[@type=\'password\']").send_keys(password) time.sleep(3) self.driver.find_element(By.CSS_SELECTOR,".r-1loqt21:nth-child(4)").click() time.sleep(4) printLog("登录成功") # 寻找打卡功能模块 # self.driver.find_element(By.CSS_SELECTOR,".r-1loqt21:nth-child(2)").click() self.driver.find_element(By.XPATH, "//*[@id='app']/div/div[1]/div/div/div/div[1]/div/div/div/div/div/div[1]/div/div/div/div[2]/div/div/div[3]/div/div/div[5]/div/div/div[3]").click() time.sleep(5) printLog("开始打卡") # self.driver.find_element(By.CSS_SELECTOR, "#col_3_row_6 .css-901oao").click() self.driver.find_element(By.XPATH, "//*[@id='col_1_row_11']/span").click() time.sleep(5) self.driver.find_element(By.XPATH, "//div[2]/div/div/div/div/div/div/div/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[34]/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[2]/div/div/div/div/div/div/div/div/div/div[2]/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[2]/div/div[2]/div/div/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[3]/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//div[6]/div/div/div/div").click() time.sleep(1) self.driver.find_element(By.XPATH, "//input").click() time.sleep(1) self.driver.find_element(By.XPATH, "//input").send_keys("浙江理工大学") time.sleep(1) printLog("打卡进行中") #选项,不知道为什么css定位不能用 self.driver.find_element(By.XPATH, "//div[11]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[13]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[14]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[18]/div/div/div/div/div/div/div[2]").click() self.driver.find_element(By.XPATH, "//div[19]/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[19]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[20]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[21]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[22]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[24]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[26]/div/div/div/div/div/div/div").click() self.driver.find_element(By.XPATH, "//div[27]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[29]/div/div/div/div/div[2]/div/div").click() self.driver.find_element(By.XPATH, "//div[31]/div/div/div/div/div[2]/div/div").click() time.sleep(1) #提交 self.driver.find_element(By.XPATH, "//*[@id='col_0_row_40']/div/div/div/div").click() # self.driver.find_element(By.CSS_SELECTOR, "#col_0_row_40 .r-1loqt21 > .css-1dbjc4n").click() time.sleep(10) printLog("本次打卡成功") def quit(self): self.driver.quit() printLog("浏览器退出")if __name__ == '__main__': test = Test() readData() for i in range(len(userList)): try: test.signIn(userList[i][0],userList[i][1]) except: printLog("打卡成功或者系统bug,正在进行下一个") continue test.quit() printLog("今日打卡任务完成") sys.exit()
到此,关于“python selenium模拟点击问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!