【问题标题】:Run-time error '0': SeleniumError invalid argument using Selenium, vba and css selector to click a button运行时错误“0”:使用 Selenium、vba 和 css 选择器单击按钮的 SeleniumError 无效参数
【发布时间】:2020-03-21 21:39:58
【问题描述】:

我正在尝试点击网页上的按钮,但一直出现以下错误(抱歉,显然还不能嵌入图像,否则我会在此处放一个屏幕截图)

运行时错误“0”: 硒错误 无效的论点

按钮的Http是

<input type="file" name="import_file" id="import_file" accept=".csv, text/csv">

我试过bot.FindElementById("import_file").Click,但返回了同样的错误,所以我尝试使用名称,同样的错误。

我刚刚尝试过bot.FindElementByCss("input#import_file[type='file'][name='import_file'][accept='.csv, text/csv']").Click 并返回相同的错误...

不确定下一步该尝试什么;有任何想法吗?我的整个子都在下面供参考(密码等,显然被覆盖了)

Sub import_csv()

Dim bot As New WebDriver

bot.Start "chrome", "https://website.com"
bot.Get "/"

'log in
bot.FindElementById("user_login").SendKeys ("####")
bot.FindElementById("user_password").SendKeys ("####")
bot.FindElementByName("commit").Click

'navigate to import screen
bot.Get ("/stocks/import_stocks")

'tick 'File has header row?'
bot.FindElementById("file_has_header").Click

'Click 'Browse...' to open import screen - this is where something isn't working
bot.FindElementByCss("input#import_file[type='file'][name='import_file'][accept='.csv, text/csv']").Click

'import
bot.FindElementByName("commit").Click
bot.SendKeys ("C:\Users\Duane Humphreys\Documents\calendar.CSV")
bot.SendKeys bot.Keys.Enter
bot.FindElementByName("commit").Click

End Sub

编辑: 如果有用的话,我尝试单击的按钮周围的 html 如下所示:

<span class="l-inline-row-block form-file">
          <span class="l-inline-col" style="width: 110px;">
            <a class="btn-medium btn-alt form-file-btn">
              Browse… <input type="file" name="import_file" id="import_file" accept=".csv, text/csv">
            </a>
          </span>
          <span class="l-inline-col">
            <input type="text" readonly="">
          </span>
        </span>

【问题讨论】:

  • 尝试将Get更改为绝对路径
  • 好的,可以看到其中的逻辑并将相应地进行修改,但肯定不会对我要解决的问题产生任何影响?
  • 这是一个可以设置无条件测试帐户的网站吗?
  • 您是否按照建议将 bot.Get "/stocks/import_stocks"(不带括号)更新为绝对路径,但仍然看到相同的错误?
  • @QHarr,不,这是一个仅限员工访问的 ERP 系统,抱歉。不,使用绝对路径并没有解决它。

标签: vba selenium google-chrome css-selectors selenium-chromedriver


【解决方案1】:

我认为这并没有解决这里发生的任何事情的根本原因,但我已经设法解决了它

bot.FindElementById("import_file").ClickAndHold
bot.SendKeys bot.Keys.Enter

我仍然不知道为什么.ClickAndHold 有效而.click 无效,但现在这将有效。 LMK,如果有更清洁的方法来实现同样的事情。

【讨论】:

    【解决方案2】:

    参数无效

    invalid argument 错误是WebDriver 错误,当传递给命令的参数无效或格式错误时发生。


    此错误消息...

    Run-time error '0': SeleniumError invalid argument
    

    ...暗示传递给命令的参数无效或格式错误

    来自WebDriver - W3C Living Document

    您使用的Locator Strategy 中出现 字符(即.)似乎存在一个小问题。简而言之,您需要避免在定位器中使用 . 字符。您可以使用以下任一解决方案:

    bot.FindElementByCss("input#import_file[type='file'][name='import_file'][accept*='csv']").Click
    

    或者

    bot.FindElementByCss("input#import_file[type='file'][name='import_file'][accept$='text/csv']").Click
    

    【讨论】:

    • 感谢@DebanjanB 的输入,我可以看到逻辑,但它们都没有工作。如果没有“accepts”属性,元素名称实际上是唯一的,所以我已经尝试过没有它,但它仍然不起作用。我已经在原始问题中的按钮周围添加了 html,如果这有任何用处
    • @dhumphreys 在尝试识别元素并调用 click() 之前,请等待 元素可点击
    • OK,所以在 bot.FindElementById("file_has_header").Click 之后?
    • @dhumphreys 是的,在bot.FindElementById("file_has_header").Click之后
    • @dhumphreys 您是否看到同样的错误?否则使用当前错误更新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多