Загрузите файлы внутри элемента div, используя selenium - Python - PullRequest
0 голосов
/ 07 октября 2019

Я хотел бы использовать селен в python для загрузки файлов внутри элемента div (в div нет файлов динамически). У меня есть список имен файлов.

Содержимое HTML:

<div _ngcontent-c16="" class="ng-star-inserted">
<!---->
<!---->
    <div _ngcontent-c16="" class="documents ng-star-inserted">
        <div _ngcontent-c16="" class="row">
            <div _ngcontent-c16="" class="col-12">
            <button _ngcontent-c16="" class="btn btn-primary btn-block card-button" type="button" aria-describedby="cdk-describedby-message-2" cdk-describedby-host="" style="touch-action: none; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
            <span _ngcontent-c16="" class="halflings halflings-download-alt">
            </span> example.zip 
            </button>
            </div>
        </div>
    </div>
    <div _ngcontent-c16="" class="documents ng-star-inserted">
        <div _ngcontent-c16="" class="row">
            <div _ngcontent-c16="" class="col-12">
            <button _ngcontent-c16="" class="btn btn-primary btn-block card-button" type="button" aria-describedby="cdk-describedby-message-2" cdk-describedby-host="" style="touch-action: none; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">
            <span _ngcontent-c16="" class="halflings halflings-download-alt">
            </span> example2.zip 
            </button>
            </div>
        </div>
    </div>
</div>

Я пытаюсь использовать ...

xpath = "/html/body/app-root/div/mat-sidenav-container/mat-sidenav-content/div/div/app-application-detail/div/div/div[1]/div[2]/div[4]/div/div/div[2]/div/div/div/div/button"
driver.find_element_by_xpath(xpath).click()

Я пытаюсь использовать имя файла, xpath, но не могу нажать и загрузить файл. Любое решение?

1 Ответ

1 голос
/ 07 октября 2019

Исходя из вашего примера HTML, похоже, что текст example.zip содержится в самом элементе button. Поскольку имеется несколько кнопок, вам следует запросить текст example.zip для кнопки. Я бы вызвал WebDriverWait и использовал бы относительный XPath, подобный этому:

button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'example.zip')]")))
button.click()

Если это не работает, вы можете попробовать запустить Javascript, чтобы вместо этого нажать кнопку:

button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'example.zip')]")))

driver.execute_script("arguments[0].click();", button)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...