0

ウェブサイトからデータを取得する作業を行っていますが、電話番号を取得するリンクをクリックすると、最初に電話番号を尋ねるモーダル フォームが開き、電話番号が表示されます。

私が今持っている課題は、入力フィールドにキーを送信したいので、入力フィールドには名前もIDもないため、xpathを使用して入力フィールドを見つけました:

xxx = driver.find_element_by_xpath("//input[@placeholder='081xxxxxxxx']")

これを印刷したところ、いくつかのセレンオブジェクトが返されましたが、次のようなキーを送信しようとすると:

xxx.send_keys('08100000000')

html コードのスニペットを次に示します。

<div class="row">
<div class="medium-12 columns">
    <div class="guest-text">
        One step closer! <br />
        <span>Please provide your contact number to view business contact details</span>
    </div>

    <form action="" data-abide="ajax" novalidate="novalidate">
        <div id="txtUserPhoneNumber" ng-show="!isLoggedIn && collectUserPhone == ''" class="guest-no">
            <label>
                <div class="guest-label">Phone Number</div>
                <input type="text" placeholder="081xxxxxxxx" ng-model="UserPhoneNew" required data-invalid="" aria-invalid="true" maxlength="11">

            </label>
        </div>
    </form>
</div>

私が試してみました:

xxx = driver.find_element_by_xpath("//input[@placeholder='081xxxxxxxx']")
xxx.send_keys('08100000000')

dummy_number = driver.find_element_by_xpath("//div[contains(@class, 'modal small guest')]/div[contains(@class, 'guest-modal-wrapper')]//form[1]//input[1]")
dummy_number.send_keys('081000000')

次のようなエラーが表示されました。

Traceback (most recent call last):
File "Dropbox/automation/vconnect.py", line 76, in <module>
    RunAutomation.instantiatechrome()
  File "Dropbox/automation/vconnect.py", line 61, in instantiatechrome
    xxx.send_keys('081xxxxxxxx')
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 479, in send_keys
    'value': keys_to_typing(value)})
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  (Session info: chrome=66.0.3359.139)
  (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.13.0-39-generic x86_64)

ご意見をお待ちしております。

4

3 に答える 3

1

エラーメッセージは、要素が表示されていないことを示しています。そのため、表示されるまで明示的に待機する必要があります。here の説明に従って、ExpectedCondition を使用します。

最終的に、コードは次のようになります (最大 120 秒待機します)。

from selenium.webdriver.support import expected_conditions as EC

...

wait = WebDriverWait(driver, 120)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='081xxxxxxxx']")))
element.send_keys('08100000000')
于 2018-05-02T14:23:18.300 に答える
0

エラーについては、要素が表示され、操作できるようになるまで待つ必要があります。「Selenium での Implicity と Explicity の待機」を読んで学習できます。

ここでは、 https ://stackoverflow.com/a/27600986/5120498 に関する追加情報を見つけることができます。

また、追加のヒント。

通常、要素が非常に難しい場合、または ID や CssSelector で見つけることが不可能な場合にのみ、XPath を使用します。XPath は CssSelector ほど一般的ではなく、書き方によってはわかりにくいためです。

XPath または CssSelector を使用して要素を検索する必要がある場合、まず、ページとの対話後に変更されない値と、一意の値を提供するものを確認する必要があります (要素が 1 つだけ必要な場合、ofc)。

html には id を持つ要素が 1 つしかなくtxtUserPhoneNumber、目的の要素がその中にあるため、選択を開始しましょう。その後、必要な要素のタグ名を見てください。inputその中に要素は1つしかありませんか?良い!したがって、これらのいくつかの情報のみを使用して要素に到達できます。

Cssセレクター:

#txtUserPhoneNumber 入力

Xpath:

//*[@id='txtUserPhoneNumber']//input

于 2018-05-02T14:29:31.467 に答える