Python Selenium webdriver不是';无法清除字段,但能够向其发送密钥

Python Selenium webdriver不是';无法清除字段,但能够向其发送密钥,python,selenium,Python,Selenium,我正在尝试创建一个程序,用一个新帐户注册instagram,我已经生成了电子邮件和其他邮件,当我继续向适当的字段发送密钥时,它做得很好。我想实现一个重试功能,它将清除电子邮件字段并尝试使用不同的邮件。然而,这不工作,即使发送_键到它以前的工作?下面是我的代码片段 driver.get('https://www.instagram.com') driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(m

我正在尝试创建一个程序,用一个新帐户注册instagram,我已经生成了电子邮件和其他邮件,当我继续向适当的字段发送密钥时,它做得很好。我想实现一个重试功能,它将清除电子邮件字段并尝试使用不同的邮件。然而,这不工作,即使发送_键到它以前的工作?下面是我的代码片段

driver.get('https://www.instagram.com')
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail)
driver.find_element_by_xpath("//*[contains(@aria-label,'Full')]").send_keys(name + lastname)
driver.find_element_by_xpath("//*[contains(@aria-label,'User')]").send_keys(namae+lastonamae+pamae2)
driver.find_element_by_xpath("//*[contains(@aria-label,'Password')]").send_keys(password)
driver.find_element_by_xpath("//*[contains(@type,'submit')]").click()
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div[1]/div/form/div[3]/div/div[2]/span') #this looks for the element only present on the fail page
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").clear()
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail2)
这将尝试使用适当的凭据创建一个新帐户,但是当它失败时,我希望它尝试查找仅在失败时才存在的元素,如果它发现该元素,则应清除电子邮件字段并使用其他元素重试。代码如下

driver.get('https://www.instagram.com')
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail)
driver.find_element_by_xpath("//*[contains(@aria-label,'Full')]").send_keys(name + lastname)
driver.find_element_by_xpath("//*[contains(@aria-label,'User')]").send_keys(namae+lastonamae+pamae2)
driver.find_element_by_xpath("//*[contains(@aria-label,'Password')]").send_keys(password)
driver.find_element_by_xpath("//*[contains(@type,'submit')]").click()
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div[1]/div/form/div[3]/div/div[2]/span') #this looks for the element only present on the fail page
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").clear()
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail2)
它不会清除字段,但也不会引发错误。然后继续键入第二封电子邮件,没有问题。我很感激在这件事上得到的任何帮助

编辑:发布更大的代码块。

def signup():
    driver.get('https://www.instagram.com')
    time.sleep(7)
    if trycounter < 3:  #this is almost always true, just a failsafe
            driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail1)
            driver.find_element_by_xpath("//*[contains(@aria-label,'Full')]").send_keys(name + ' ' + lastname)
            driver.find_element_by_xpath("//*[contains(@aria-label,'User')]").send_keys(name+lastname+extension)
            driver.find_element_by_xpath("//*[contains(@aria-label,'Password')]").send_keys(password)
            driver.find_element_by_xpath("//*[contains(@type,'submit')]").click()
            time.sleep(7)  
            try: #this only executes if a popup that wants you to confirm your age pops up
                    driver.find_element_by_xpath('//*[@id="igCoreRadioButtonageRadioabove_18"]').click() 
                    driver.find_element_by_xpath('/html/body/div[3]/div/div[3]/div/button').click()
                    time.sleep(5)
            except:
                    pass
            try:
                    randomgen() #generates the mail,password and name
                    driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div[1]/div/form/div[3]/div/div[2]/span')
                    time.sleep(1)
                    driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").clear()
                    time.sleep(1)
                    driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail2)
                    driver.find_element_by_xpath("//*[contains(@aria-label,'User')]").send_keys(username)
                    driver.find_element_by_xpath("//*[contains(@type,'submit')]").click()
                    time.sleep(7)
def signup():
司机,上车https://www.instagram.com')
时间。睡眠(7)
如果trycounter<3:#这几乎总是正确的,只是故障保护
驱动程序。通过xpath(“/*[contains(@aria label,'Email')]”)查找元素。发送密钥(mail1)
驱动程序。通过xpath(“/*[contains(@aria label,'Full')]”)查找元素。发送键(name+“”+lastname)
驱动程序。通过xpath(“/*[contains(@aria label,'User')]”)查找元素。发送键(name+lastname+扩展名)
驱动程序。通过xpath(“/*[contains(@aria label,'Password')]”)查找元素。发送密钥(Password)
驱动程序。通过xpath(“/*[contains(@type,'submit')]”)查找元素。单击()
时间。睡眠(7)
try:#只有当弹出一个希望您确认年龄的弹出窗口时,才会执行此操作
驱动程序。通过xpath('/*[@id=“igcoreRadioButtonGenerateRadioOver_18”]”查找_元素。单击()
驱动程序。通过xpath('/html/body/div[3]/div/div[3]/div/button')查找元素。单击()
时间。睡眠(5)
除:
通过
尝试:
randomgen()#生成邮件、密码和名称
驱动程序。通过xpath('/*[@id=“react root”]/section/main/article/div[2]/div[1]/div/form/div[3]/div/div[2]/span')查找元素
时间。睡眠(1)
驱动程序。通过xpath(“/*[contains(@aria label,'Email')]”)查找元素。清除()
时间。睡眠(1)
驱动程序。通过xpath(“/*[contains(@aria label,'Email')]”)查找元素。发送密钥(mail2)
驱动程序。通过xpath(“/*[contains(@aria label,'User')]”)查找元素。发送密钥(用户名)
驱动程序。通过xpath(“/*[contains(@type,'submit')]”)查找元素。单击()
时间。睡眠(7)

您可以尝试类似的方法来删除邮件1

driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(Keys.chord(Keys.CONTROL,"a"))
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(Keys.DELETE)
driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]").send_keys(mail2)

所以这肯定是一个解决办法。我刚在instagram上试过。虽然没有一个字段带有一个叫做Email的aria标签。这是我的“手机号码或电子邮件”标签


我会继续查看它,看看为什么clear命令不起作用。

您可以使用以下代码作为clear方法的替代方法:

from selenium.webdriver.common.keys import Keys
email_element = driver.find_element_by_xpath("//*[contains(@aria-label,'Email')]")
email_element.send_keys(Keys.CONTROL, 'a')
email_element.send_keys(mail1)

fullname_element = driver.find_element_by_xpath("//*[contains(@aria-label,'Full')]")
fullname_element.send_keys(Keys.CONTROL, 'a') 
fullname_element.send_keys(name + ' ' + lastname)

# do it for other field as well

在第二个代码段中,错误页面check->没有任何作用。它正在寻找一个元素,但没有条件。因此,它实际上什么也不做。除非你没有发布所有的代码,那是在某个try子句中?根据你的一些描述,它确实表明了这一点。如果这只是相关代码的一部分,请发布所有代码。我尝试了其他字段,但没有一个可以用我当前的代码清除,这似乎不确定为什么。因此,我建议发布完整的代码。都在第一个代码段和第二个代码段之间。我只能根据你目前的情况做出假设。就你们目前的情况来看,这个问题对我来说是显而易见的。单击“提交”后,您无需等待。显然,您的服务器正在检查是否可以创建此新用户。在这段时间内,您的代码会跳转到搜索错误,而错误可能还不存在。但是,您可能需要等待,只是没有发布所有代码。所以我不知道。发布了更大的代码块,原始代码中确实有睡眠。@Naay:试试这个解决方案,如果遇到任何问题,请告诉我