【问题标题】:find_element_by_name does not work in Pythonfind_element_by_name 在 Python 中不起作用
【发布时间】:2019-10-10 12:45:24
【问题描述】:

昨天一切正常,但今天我收到此错误:

Traceback(最近一次调用最后一次):文件“bot.py”,第 31 行,在 ig_bot = InstagramBot('temp_username', 'temp_password') 文件“bot.py”,第 13 行,在 init self.login() 文件“bot.py”,第 20 行,登录 self.driver.find_element_name('username').send_keys(self.username) selenium.common.exceptions.NoSuchElementException:消息:没有这样的 元素:无法找到元素:{“方法”:“css selector","selector":".username"} (会话信息: 铬=77.0.3865.90)

我尝试通过类名、xpath 来查找元素,但这些都不起作用。

bot.py

from selenium import webdriver
import os
import time

class InstagramBot:

    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.driver = webdriver.Chrome('chromedriver.exe')
        self.base_url = 'https://www.instagram.com'

        self.login()


    def login(self):

        self.driver.get('{}/accounts/login/?source=auth_switcher'.format(self.base_url))
        time.sleep(2)
        self.driver.find_element_by_name('username').send_keys(self.username)
        self.driver.find_element_by_name('password').send_keys(self.password)

        time.sleep(1)
        self.driver.find_elements_by_xpath("//div[contains(text(), 'Log In')]")[0].click()

    def nav_user(self, user):
        self.driver.get('{}/{}/'.format(self.base_url, user))

if __name__ == '__main__':

    ig_bot = InstagramBot('temp_username', 'temp_password')

    ig_bot.nav_user('garyvee')

html

<input class="_2hvTZ pexuQ zyHYP" aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" value="">

【问题讨论】:

  • 如果能提供更多的HTML代码或截图就更好了。此外,您可以添加代码让等待 chrome 驱动程序直到它可见。

标签: python html selenium selenium-chromedriver instagram


【解决方案1】:

我检查了页面,它确实有效,您应该简单地使用 find_element_by_name 而不是 find_element_by_class_name

chrome 控制台的输出:

document.getElementsByName("username")[0];

<input class=​"_2hvTZ pexuQ zyHYP" aria-label=​"Phone number, username, or email" aria-required=​"true" autocapitalize=​"off" autocorrect=​"off" maxlength=​"75" name=​"username" type=​"text" value autocomplete=​"off" style=​"background-image:​ url("data:​image/​png;​base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAADo6zjiAAAAAXNSR0IArs4c6QAAAnVJREFUWAntVzuL4lAUPokBsVB0t9odK8VCLCal3Q4WbmUpCFv6DyymEmys9gf4B4RlS7GwEWQsBAsL195q2J3KWIiVrz0nJBcTk9yr3jCw7AG5j3PO9325j2OiAFq73X7Y7/​ffsft0Op0+05wsUxTlD2K9aJr23Gw2f7txFYv8FxJ/​dDtljlHICkU8ukWo9ORhk9ODEIe1yo7nUnH05JgJd3DBpcre8yD9Xly0Au9q/​7aAfD4PjUYDqPWzUFegUChAIpEAav0sVAF4901eu/​USEaoAL0L3nENANBqFbDYLqVTKHQe3+i6AXBOaPU4mk1Cv1yEej8PxeIR+vw/​z+dx03+qzsYNatgLFYtEkp2BVVaFUKrG8W30MIKDDBATEhOpiAqbTKWw2G5OMtmA0GjHiW30MIKCjtFqtk+2ng5ZOp8EwDFiv1/​a02Qb5HIGcAV7JNwwZW+8Hrw4BnFypbhRioAidbYFUdAEw/​Gf8QO8H7ybA0viF1QEB0cIhmUwGqtUqxGIxM2cymcBwOLzIx1X4JF0A1YxyuWzWkgtGjwlpAiKRCFQqFdB13YPGf0qagFqtBrlczmSiOkJGFZVnKl4Hem+/​26hYEfHhcIBerwe73U4IkyS+CEVygpbLJQwGA+h2u7BYLIC2RMSwFmjPeB+/​4om8+8NkNpsxzqCXEBaEHZW+VFDEIyb8kLUd5wS8vnkIrc+lb7xg8p/​/​d4jE82L4x5SHcKf/​v4CrCxEe1Deq4byVX61WrBBtt1vPcMK6WgAijfFX80Q8m+x0Omcj3+746jNAdQOVG76Qgg7CIKyrBeCVfcVEHQF+0hIK8rEwyqFcwiCsv+R847qxq2vXAAAAAElFTkSuQmCC")​;​ background-repeat:​ no-repeat;​ background-attachment:​ scroll;​ background-size:​ 16px 18px;​ background-position:​ 98% 50%;​">​

【讨论】:

  • 编辑了我的问题。我以错误的方式复制了我的代码,这一行是按名称而不是类名:'self.driver.find_element_by_name('username').send_keys(self.username)'
  • 您的 selenium web 驱动程序是否在私有模式下运行?如果不是,你可能有一些 cookie 或其他东西让你进入一个页面,上面写着“这是你吗?你想切换帐户吗?”您可以尝试使用 GUI(非无头)运行 selenium,并尝试查看您是否登陆该页面。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 2012-06-07
  • 2017-09-08
  • 2021-01-06
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多