Можно ли посмотреть детали элемента кнопки, который я идентифицирую с селеном?
Я использую селен для навигации по JS тяжелым веб-страницам. Я хочу загрузить некоторые файлы с этих веб-страниц, но сначала я должен запросить доступ к файлам (которые затем присоединяются к очереди запросов в таблице на веб-странице), а через некоторое время (и веб-страницу refre sh) нажать кнопку загрузки. становится доступным на моем конкретном ряду на столе. Я вижу, что все кнопки загрузки (NOT LINK TEXT) имеют уникальный и непредсказуемый ссылочный идентификатор в своем href, но также включают в себя уникальный идентификатор запроса (например, в этом случае '2020Apr8 2020Apr9'):
<a class="a-button-text" href="/payments/reports/download?_encoding=UTF8&contentType=text%2Fcsv&fileName=2020Apr8-2020Apr9CustomTransaction.csv&referenceId=80808018362" role="button">Download</a>
<a class="a-button-text" href="/payments/reports/download?_encoding=UTF8&contentType=text%2Fcsv&fileName=2019Mar23-2020Mar1CustomTransaction.csv&referenceId=80631018357" role="button">Download</a>
Помимо включения в список «2020Apr8 2020Apr9» я не думаю, что есть простой, предсказуемый и уникальный способ идентифицировать эту кнопку загрузки как ту, которая относится к информации, которую я хочу загрузить (или. click ()).
вот код, который я использую для просмотра элементов кнопки с селеном:
from selenium import webdriver
browser = webdriver.Firefox() # spin up firefox
browser.get('Website address') # navigate to relevant page
get_button_elements = browser.find_elements_by_css_selector('a.a-button-text')
Если я смотрю на объект get_button_elements:
for button in get_button_object:
print(button)
вывод выглядит следующим образом
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="a0c542b6-7c21-4851-bc50-39a5a7362e9a", element="9cb24e04-cdbf-49f5-99a2-fa91df862814")>
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="a0c542b6-7c21-4851-bc50-39a5a7362e9a", element="28de61df-9bdf-4c9d-aae3-d1658bf0abfa")>
Я считаю, что это три кнопки загрузки, которые я сейчас вижу на странице. На странице есть множество других «требований» без кнопок загрузки, но присутствуют 3 кнопки загрузки.
Есть ли у меня способ узнать, что такое эти кнопки? Мой план был бы:
- refre sh страница
- создать объект селена, содержащий все кнопки
- посмотреть, содержит ли какая-либо из кнопок уникальный идентификатор (например, '2020Apr8 2020Apr9')
- , если да, затем нажмите.
РЕДАКТИРОВАТЬ
get_div = browser.find_element_by_xpath("//a[@class='a-button-text'][contains(@href, '2020Apr8 2020Apr9')]")
for element in get_div:
print(element)
Traceback: Traceback (самый последний последний вызов):
File "C:/Users/mbsta/PycharmProjects/untitled2/Amazon_Seller_Central.py", line 249, in <module>
download_custom_transcation_reports()
File "C:/Users/mbsta/PycharmProjects/untitled2/Amazon_Seller_Central.py", line 179, in download_custom_transcation_reports
get_div = browser.find_element_by_xpath("//a[@class='a-button-text'][contains(@href, '2020Apr8 2020Apr9')]")
File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\mbsta\Anaconda3\envs\untitled2\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //a[@class='a-button-text'][contains(@href, '2020Apr8 2020Apr9')]
РЕДАКТИРОВАТЬ 2
Некоторые попросили дополнительную информацию на странице. Это центральная страница продавца Амазонки. Я бы предпочел не использовать что-либо с широкими путями для поиска кнопок, потому что amazon периодически меняет вещи, и я бы хотел, чтобы это не ломалось.
Если я выберу 'copy CSS path' to где кнопка будет, вот что я получаю:
html.asp - ws.a - ember.a - transition.a - transform.a - opacity.a - border - image.a - border - radius.a - box - shadow.a - text - stroke.a - text - shadow.a - touch - scrolling.a - transform3d.a - gradients.a - local - storage.a - textarea - placeholder.a - input - placeholder.a - autofocus.a - webworker.a - history.a - geolocation.a - drag - drop.a - svg.a - canvas.a - video.a - audio.a - js.asp - js.asp - audio.asp - video.asp - canvas.asp - drag - drop.asp - geolocation.asp - history.asp - autofocus.asp - input - placeholder.asp - textarea - placeholder.asp - local - storage.asp - gradients.asp - transform3d.asp - touch - scrolling.asp - text - shadow.asp - text - stroke.asp - box - shadow.asp - border - radius.asp - border - image.asp - opacity.asp - transform.asp - transition.a - ws
body.a - aui_72554 - c.a - aui_dropdown_187959 - c.a - aui_pci_risk_banner_210084 - c.a - aui_perf_130093 - c.a - aui_preload_261698 - c.a - aui_tnr_v2_180836 - c.a - aui_ux_145937 - c.a - meter - animate
div # a-page div#sc-content-container div.a-row div.a-column.a-span8 div#reportsTable div#daterangereportstable.mt-container.clearfix div.mt-content.clearfix div.mt-table-container.clearfix table.a-bordered.a-horizontal-stripes.mt-table tbody tr#3.mt-row td#3-ddrAction.mt-cell.mt-left span#downloadButton.a-button.a-button-primary.a-button-small span.a-button-inner a.a-button-text
'copy CSS path' для кнопки, которая еще не загружена:
html.asp - ws.a - ember.a - transition.a - transform.a - opacity.a - border - image.a - border - radius.a - box - shadow.a - text - stroke.a - text - shadow.a - touch - scrolling.a - transform3d.a - gradients.a - local - storage.a - textarea - placeholder.a - input - placeholder.a - autofocus.a - webworker.a - history.a - geolocation.a - drag - drop.a - svg.a - canvas.a - video.a - audio.a - js.asp - js.asp - audio.asp - video.asp - canvas.asp - drag - drop.asp - geolocation.asp - history.asp - autofocus.asp - input - placeholder.asp - textarea - placeholder.asp - local - storage.asp - gradients.asp - transform3d.asp - touch - scrolling.asp - text - shadow.asp - text - stroke.asp - box - shadow.asp - border - radius.asp - border - image.asp - opacity.asp - transform.asp - transition.a - ws
body.a - aui_72554 - c.a - aui_dropdown_187959 - c.a - aui_pci_risk_banner_210084 - c.a - aui_perf_130093 - c.a - aui_preload_261698 - c.a - aui_tnr_v2_180836 - c.a - aui_ux_145937 - c.a - meter - animate
div # a-page div#sc-content-container div.a-row div.a-column.a-span8 div#reportsTable div#daterangereportstable.mt-container.clearfix div.mt-content.clearfix div.mt-table-container.clearfix table.a-bordered.a-horizontal-stripes.mt-table tbody tr#0.mt-row td#0-ddrAction.mt-cell.mt-left div a.drrRefreshTable