首页 > 解决方案 > 无法缩小 Python/Selenium 中的正确元素

问题描述

因此,我正在尝试制作一个网站操作脚本,以帮助在我们的托管提供商上自动创建电子邮件邮箱。

我既是 Python 新手,也是编写 Web 资源脚本的新手,所以如果有些东西看起来很奇怪或平庸,那就是为什么 :)

这是我的脚本:

import time
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from selenium import webdriver
from selenium.webdriver.support.select import Select as driverselect

driver = webdriver.Firefox()
main_url = 'https://website.com:446'
opts = Options()
# noinspection PyDeprecation
# opts.set_headless()
#assert opts.headless  # Operating in headless mode
browser = Firefox(options=opts)
browser.get(main_url)

search_form = browser.find_element_by_id('LoginName')
search_form.send_keys('username')
search_form = browser.find_element_by_id('Password')
search_form.send_keys('password')
search_form.submit()
time.sleep(5)
# provision = driverselect(driver.find_element_by_xpath("/html/body/div[2]/div[2]/nav/div/ul/li[4]"))
provision = driver.find_element_by_xpath('/html/body/div[2]/div[2]/nav/div/ul/li[4]/a/span[1]')
provision.submit()
# exchange = driver.find_element_by_name('Exchange')
# exchange.submit()

我的错误是:

回溯(最近一次通话最后):文件“/home/turd/PycharmProjects/Automate_NSGEmail/selenium_test.py”,第 23 行,in provision = driver.find_element_by_xpath('/html/body/div[2]/div[2]/导航/div/ul/li[4]/a/span 1 ')

文件“/home/turd/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py”,第 394 行,在 find_element_by_xpath 中 return self.find_element(by=By.XPATH, value=xpath ) 文件“/home/turd/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py”,第 976 行,在 find_element return self.execute(Command.FIND_ELEMENT, { File "/ home/turd/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py”,第 321 行,在执行 self.error_handler.check_response(response) 文件“/home/turd/.local /lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py",第 242 行,在 check_response 中引发 exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:/html/body/div[2]/div[2]/nav/div/ul/li[4]/a/span 1

现在我直接从该页面上的开发工具复制了 Xpath 值,以下是该网站上的代码块:

在此处输入图像描述

我正在尝试抓取并“单击”上图中的一个 Active Dynamic-Menu 项。我认为该菜单是 JS,但我不是 100% 肯定的。

无论如何,如果有人可以帮助我缩小范围并抓住那个爆炸的元素,我将非常感激。

标签: javascriptpythonjqueryselenium

解决方案


所以我自己找到了答案。我的脚本开头有一些错误的代码:

driver = webdriver.Firefox()
main_url = 'https://website.com:446'
opts = Options()
# noinspection PyDeprecation
# opts.set_headless()
#assert opts.headless  # Operating in headless mode
browser = Firefox(options=opts)
browser.get(main_url)

我将此部分更改为:

driver = webdriver.Firefox()
url = 'https://website.com:446'
opts = Options()
driver.maximize_window()
driver.get(url)

我之前打开了两个 Firebox 实例,driver.* 行会尝试在未登录的 FF 实例上定位 xpath 标签。

德普。


推荐阅读