Excel 如何在Selenium Basic中通过FindElementByXPath根据HTML定位元素

Excel 如何在Selenium Basic中通过FindElementByXPath根据HTML定位元素,excel,vba,selenium,selenium-webdriver,xpath,Excel,Vba,Selenium,Selenium Webdriver,Xpath,我正在编写一个VBA代码来登录网页,并将一些信息加载到excel工作表中 我是硒的新手。我已经得到了正确的登录部分,但现在我需要在一个元素中单击,我不断得到错误 我需要点击公司2按钮 到目前为止,我得到的是: bot.FindElementByXPath("//input[@value=""Company 1""]").Click 输出NoSuchElementError bot.FindElementByXPath("//input[@value=""Company 2""]").Clic

我正在编写一个VBA代码来登录网页,并将一些信息加载到excel工作表中

我是硒的新手。我已经得到了正确的登录部分,但现在我需要在一个元素中单击,我不断得到错误

我需要点击
公司2
按钮

到目前为止,我得到的是:

bot.FindElementByXPath("//input[@value=""Company 1""]").Click
输出
NoSuchElementError

bot.FindElementByXPath("//input[@value=""Company 2""]").Click
输出
ElementNotVisible


我不知道我做错了什么,我认为第一个被隐藏的输入与此有关。希望任何人都能帮助我。

XPath可能不正确。请尝试以下语法:

FindElementByXPath("//input[@value='Company 1']")

首先,尽可能使用CSS选择器。它们更容易处理。 现在,如果您正在使用CSS选择器,请尝试使用以下内容查找第二个按钮

input[value=“Company 2”]


有关此选择器的详细信息,请查看

您可以使用任何xpath,在第一次查看中,我发现您的xpath不正确,请尝试以下操作:

//input[@type='button'][@value='Company 2']
//input[@type='button'&& @value='Company 2']
//input[@role='button'][@value='Company 2']
您还可以使用
findelelements()
存储所有按钮,并使用if-else根据您共享的HTML提取公司2按钮,以调用所需元素上的
click()
,您可以使用以下解决方案:

  • 要单击文本为公司1的元素,请执行以下操作:

    bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 1']").Click
    
    bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 2']").Click
    
  • 要单击文本为公司2的元素,请执行以下操作:

    bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 1']").Click
    
    bot.FindElementByXPath("//input[@class='btn_empresa ui-button ui-widget ui-state-default ui-corner-all' and @value='Company 2']").Click
    

您是否尝试过右键单击inspect中的HTML并转到Copy>Copy XPath?这可能会给你一些不同的东西。也许按钮是从Javascript创建的,所以WebDriver实际上看不到它们

或尝试

Company_1 = bot.find_element_by_xpath("//input[@value='Company 1']")
Company_1.click()

Company_2 = bot.find_element_by_xpath("//input[@value='Company 2']")
Company_2.click()

并像其他人提到的那样使用“”引号更改语法。

可能会帮助您知道,在大多数情况下,您也可以使用
ByCss
,在这种情况下,您可以使用:

bot.FindElementByCss("input[value='Company 1']").Click
那又好又短


这是
输入[value='Company 1']
。这表示查找具有
input
标记的元素,该标记具有
value
属性,其值为
'Company 1'

选择器不太容易损坏,因为它们非常具体。你的那个看起来很有前途。嗨@SIM。很高兴见到你。有点简单,但你可能会享受以下5分钟:32级。看看你是怎么得分的:-)只要先看右边-我忘了看!嗨,QHarr,不幸的是,这并没有解决问题。我认为这与之前的输入被隐藏有关
input[value='Company 1']->NuSuchElementError
input[value='Company 2']->ElementNotVisibleError
您可以尝试循环直到可见吗?可能超出了等待时间?我在那条线前有10秒的时间。我可以看到按钮,但我不断得到
元素NotVisibleError
——是否有可能隐藏的第一个输入与此有关?嗨,rajeshkt,谢谢。但我总是收到同样的错误嗨!在这两种情况下,我都没有接触过EnterRor。我认为这与第一个输入是hiddenHi Grim有关,我如何判断按钮是否是从javascript创建的?如果有的话,我有没有办法点击它们?