试图让一个机器人与 Selenium Python 建立不和谐的连接

Posted

技术标签:

【中文标题】试图让一个机器人与 Selenium Python 建立不和谐的连接【英文标题】:Trying to make a bot to connect on discord with Selenium Python 【发布时间】:2019-05-06 10:29:47 【问题描述】:

尝试用 Selenium Python 制作一个机器人来连接 Discord:我一直在尝试制作一个机器人来连接我的 Discord。

需要的进口如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

以下代码是我的脚本 - 定义 DiscordBot:

class DiscordBot:

def __init__(self, email, password):
    self.email = email
    self.password = password
    self.driver = webdriver.Firefox()

def closeBrowser(self):
    self.driver.close()      

def login(self):
    driver = self.driver
    driver.get("https://discordapp.com/login")
    browser = webdriver.Firefox()
    email = browser.find_element("register-email")
    email.send_keys("discordbot@icloud.com")
    password = browser.find_element("register-password")
    password.send_keys("my password")
    browser.find_element_by_name("login").click()
    time.sleep(2)

但是,当上面的代码运行时,我的问题是,它会产生以下错误:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: 
Message: unknown variant `register-email`, expected one of `css selector`, `link text`,
`partial link text`, `tag name`, `xpath` at line 1 column 26

【问题讨论】:

【参考方案1】:

Selenium Discord 使用 Python 登录:

我尝试了上述所有代码,但它对我不起作用,所以经过一番忙碌,这里是 Discord Selenium Python 自动化代码。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome()

driver.get("https://discord.com/login")
time.sleep(6)

username_input = driver.find_element_by_name('email')
username_input.send_keys("enter-your-username-here")


password_input = driver.find_element_by_name('password')
password_input.send_keys("Enter-your-password-here")


login_button = driver.find_element_by_xpath('//*[@id="app-mount"]/div[2]/div/div[2]/div/div/form/div/div/div[1]/div[3]/button[2]')
login_button.click()

【讨论】:

【参考方案2】:

我会使用 CSS attribute = value 选择器来定位所需的元素。

email = driver.find_element_by_css_selector("[type=email]")
password = driver.find_element_by_css_selector("[type=password]")
driver.find_element_by_css_selector("[type=submit]").click()

【讨论】:

【参考方案3】:
    您不需要定义browserFirefox 实例),因为您已经拥有driver(另一个Firefox 实例)

    您需要将选择器的类型作为第一个参数传递给find_element,例如

    email = driver.find_element("name", "register-email")
    email = driver.find_element(value="register-email") # if your selector type is "id" (default type)
    

【讨论】:

现在当我做 email = driver.find_element(id="register-email") 这个弹出 TypeError: find_element() got an unexpected keyword argument 'id' @bebe 你为什么这样做?你在我的代码哪里找到id="register-email"

以上是关于试图让一个机器人与 Selenium Python 建立不和谐的连接的主要内容,如果未能解决你的问题,请参考以下文章

python+selenium UI脚本用例

使用 selenium 根据输入单击链接 [python]

我试图让我的 python twitter 机器人每小时每 30 分钟发一次推文。我该怎么办? [关闭]

如何让 Selenium/Ruby 机器人在执行操作之前等待?

如何在 Python 中使用 selenium 滚动到页面末尾?

在python selenium中与动态标签交互元素