无法使用硒单击元素-元素“不可交互”或“无法定位”

时间:2019-09-01 23:17:36

标签: python selenium web-scraping trading

我在www.tradingview.com上单击“登录”元素非常困难。我插入了implicitly_wait,并尝试通过xPath和类名查找元素。无论我尝试什么,我都会得到element not interactableunable to locate element

from selenium import webdriver

def sign_in():
    driver = webdriver.Chrome()
    driver.get('https://www.tradingview.com/')
    driver.implicitly_wait(10)
    driver.find_element_by_class_name('tv-header__profile-menu js-device-menu-btn').click()

sign_in()

4 个答案:

答案 0 :(得分:2)

似乎您正在尝试找到错误的元素...

尝试这个:

function groupBy(collection, property) {
   var i = 0, val, index,
        values = [], result = [];
    for (; i < collection.length; i++) {
        val = collection[i][property];
        index = values.indexOf(val);
        if (index > -1)
            result[val].push(collection[i]);
        else {
            values.push(val);
            result[val] = [];
            result[val].push([collection[i]]);
        }
    }
    return result;
}

var obj = groupBy(yourArray, "job");

答案 1 :(得分:1)

有两种登录方式。定位第二个

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

def sign_in():
    driver = webdriver.Chrome()
    driver.get('https://www.tradingview.com/')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.tv-header__dropdown-text [href*=signin]'))).click()
sign_in()

如果其他所有方法均失败,则可以使用javascript单击

driver.execute_script("document.querySelector('[href*=signin]').click();")

答案 2 :(得分:0)

嘿,一旦可以使用,就尝试一下

driver.findElement(By.Xpath("//span//a[text()='Sign In']")).click();

答案 3 :(得分:0)

  1. 如果将定位器策略更改为XPath Selector,则代码将更易读易懂
  2. 考虑使用Explicit Wait,因为它是更灵活的解决方案,可以节省时间和CPU周期。

示例代码:

driver.get("https://www.tradingview.com/")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[text()='Sign In']"))).click()