元素在点上不可点击。铬。的webdriver。蟒蛇

时间:2017-03-03 23:24:18

标签: python google-chrome selenium xpath

它已经是众所周知的bug,通常它有三种方法可以避免它:检查重叠,设置睡眠时间到完全页面下载,检查元素的可见性。 我尝试了所有这些,但他们没有工作。 好: 我正在使用twitter页面 https://api.twitter.com/oauth/authenticate?oauth_token=3b8ougAAAAAABl35AAABWpZgqDA 文本filds有HTML:

<label for="username_or_email" tabindex="-1">Username or email</label>
<input aria-required="true" autocapitalize="off" autocorrect="off" autofocus="autofocus" class="text" id="username_or_email" name="session[username_or_email]" type="text" value="">

我试过代码:

def input_label:
    links = get_driver().find_elements_by_xpath("//label[@for='username_or_email']")
    if links:
        links[0].send_keys(str(UserName))
    else:
        raise ValueError('Field with label for username_or_email not found')

我绑了代码:

def input_id:
   links = get_driver().find_elements_by_xpath("//input[@id='username_or_email']")
    if links:
        links[0].send_keys(str(UserName))
    else:
        raise ValueError('Field with id username_or_email not found')

我在send_keys之前单击此elemrnt尝试了它,没有。但我所有的解决方案都没有用。我总是有一条错误消息“元素在点上无法点击......”。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您首先尝试将文字发送到标签。你是第二次尝试是在正确的轨道上。但是,id元素没有input属性。将id更改为name,然后将links[0].send_keys()更改为links[1].send_keys()

def input_id:
   links = get_driver().find_elements_by_xpath("//input[@name='username_or_email']")
    if links:
        links[1].send_keys(str(UserName))
    else:
        raise ValueError('Field with id username_or_email not found')

编辑:澄清一下,我发现你发布的HTML中有一个id属性,但它在我能够找到的Twitter登录元素中不存在。

编辑2:如果在脚本尝试填写凭据之前问题与未完全加载的元素有关,请尝试使用WebDriverWait。一个例子是:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome([path to your chromedriver])


# code that navigates to wherever you are going...


WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.XPATH, "//input[@name='username_or_email']")))
#                     ^ this is how many seconds you want to wait

links = get_driver().find_elements_by_xpath("//input[@id='username_or_email']")
if links:
    links[0].send_keys(str(UserName))
else:
    raise ValueError('Field with id username_or_email not found')