Python+Selenium实现农民世界半自动 第二天

前言

本来脚本早就写好了,鉴于农民世界之前大跌,我没有心情再弄,所以拖到现在。

一、类

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就解决了。 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我懒所以我用脚本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值