前言
本来脚本早就写好了,鉴于农民世界之前大跌,我没有心情再弄,所以拖到现在。
一、类
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
class Wish(object):
def run(self,driver):
"""获取cookie"""
while True:
try:
time.sleep(10)
if driver.find_element(By.ID, 'RPC-Endpoint'):
ID = driver.find_element(By.ID, 'RPC-Endpoint')
ActionChains(driver).click(ID).perform()
time.sleep(3)
driver.find_element(By.NAME,'https://wax.pink.gg').click()
# 登录
time.sleep(6)
driver.find_element(By.XPATH, '//*[@id="root"]/div/div/div/button').click()
# ActionChains(driver).click(login).perform()
time.sleep(3)
driver.find_element(By.XPATH, '//*[@id="root"]/div/div/div[2]/div[2]/button[1]/p').click()
# ActionChains(driver).click(wax).perform()
time.sleep(60)
# 检查道具1-3
for i in range(1,4):
picture_link = '//*[@id="root"]/div/div/div/div[1]/section/div/section/img[{}]'.format(i)
picture = driver.find_element(By.XPATH, picture_link)
ActionChains(driver).click(picture).perform()
time.sleep(3)
mine = driver.find_element(By.CSS_SELECTOR, '#root > div > div > div.game-content > div.wapper > section > div > div > div.info-section > div.home-card-button__group > div:nth-child(1) > button > div').text
if mine == 'Mine':
mine_click = driver.find_element(By.CSS_SELECTOR, '#root > div > div > div.game-content > div.wapper > section > div > div > div.info-section > div.home-card-button__group > div:nth-child(1) > button > div')
ActionChains(driver).click(mine_click).perform()
time.sleep(10)
alert = driver.switch_to_alert()
alert.accept()
# ok_Button = driver.find_element(By.CSS_SELECTOR, 'body > div.modal-wrapper > div > div.modal__button-group > button > div').is_displayed()
if self.isElementPresent(driver) is True:
ok_button = driver.find_element(By.CSS_SELECTOR, 'body > div.modal-wrapper > div > div.modal__button-group > button > div')
ActionChains(driver).click(ok_button).perform()
else:
print("找不到ok键")
else:
print(mine)
time.sleep(10)
# 切换地图 农田板块
map_exchange = driver.find_element(By.CSS_SELECTOR, '#root > div > div > div.game-content > section.navbar-container > div:nth-child(5) > img')
ActionChains(driver).click(map_exchange).perform()
time.sleep(3)
farmer = driver.find_element(By.CSS_SELECTOR, 'body > div.modal-wrapper > div > section > div.modal-map-content > div:nth-child(3) > span')
ActionChains(driver).click(farmer).perform()
time.sleep(3)
for i in range(1,3):
picture_locate = '//*[@id="root"]/div/div/div[2]/div[1]/section/div/section/img[{}]'.format(i)
farmer_picture = driver.find_element(By.XPATH, picture_locate)
ActionChains(driver).click(farmer_picture).perform()
time.sleep(1)
water = driver.find_element(By.CSS_SELECTOR, '#root > div > div > div.game-content > div.wapper > section > div > div > div.info-section > div.home-card-button__group > div:nth-child(1) > button > div').text
if water == 'Water':
water = driver.find_element(By.CSS_SELECTOR, '#root > div > div > div.game-content > div.wapper > section > div > div > div.info-section > div.home-card-button__group > div:nth-child(1) > button > div')
ActionChains(driver).click(water).perform()
time.sleep(10)
alert = driver.switch_to_alert()
alert.accept()
else:
print(water)
time.sleep(10)
time.sleep(1)
driver.refresh()
except:
time.sleep(3)
driver.refresh()
def isElementPresent(self,driver):
"""
用来判断元素标签是否存在,
"""
try:
element = driver.find_element(By.CSS_SELECTOR,'body > div.modal-wrapper > div > div.modal__button-group > button > div')
# 原文是except NoSuchElementException, e:
except NoSuchElementException as e:
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
# 没有发生异常,表示在页面中找到了该元素,返回True
return True
直接上代码,以上将封装成一个类,实现了自动挖矿,自动浇水,还有部分功能没有实现,以后陆续更新。
二、主函数
import farmer
import time
import threading
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#多开1
def broswer0():
# option = webdriver.ChromeOptions()
# option.add_experimental_option('detach',True)
# option.add_argument(r'--user-data-dir=C:\ChromeUserData1')
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('https://play.farmersworld.io/')
windows0 = farmer.Wish()
windows0.run(driver)
#多开 2
def broswer1():
# option1 = webdriver.ChromeOptions()
# option1.add_experimental_option('detach', True)
# option1.add_argument(r'--user-data-dir=C:\ChromeUserData1')
# driver1 = webdriver.Chrome(options=option1)
driver1 = webdriver.Firefox()
driver1.maximize_window()
driver1.get('https://play.farmersworld.io/')
windows1 = farmer.Wish()
windows1.run(driver1)
#多线程实现多开
def multi_theading():
th1 = threading.Thread(target=broswer1)
th2 = threading.Thread(target=broswer0)
th1.start()
th2.start()
if __name__ == '__main__':
multi_theading()
# 总结
这里对文章进行总结:以上过程遇到的问题,同样的代码我在调用Chrome driver第一次登录是可以进去, 后面driver.refresh后是无法进入农民世界的界面,会不断卡在登录的界面,不知道如何解决,但是用Firefox就解决了。