Веб-драйвер Selenium: Как мне нажать на кнопку? - PullRequest
0 голосов
/ 09 октября 2018
<button style="margin: 8px 5px 0 0; height: 40px;" 
class="gprospect_linkedin_button gprospect_linkedin_button_style_medium"> 
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUM5NDk2ODA2NjYzMTFFOEIxMDBFQzUxNzIzRTMwQTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUM5NDk2ODE2NjYzMTFFOEIxMDBFQzUxNzIzRTMwQTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQzk0OTY3RTY2NjMxMUU4QjEwMEVDNTE3MjNFMzBBMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQzk0OTY3RjY2NjMxMUU4QjEwMEVDNTE3MjNFMzBBMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgdDInEAAAmaSURBVHja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">Get email
</button>

Попробовал код ниже, но элемент не найден:

driver.find_element_by_class_name('gprospect_linkedin_button').click()

Ответы [ 4 ]

0 голосов
/ 12 октября 2018

Попробуйте это:

driver.find_element_by_xpath("//*[contains(local-name(), 'button') and contains(@class, 'gprospect_linkedin_button')]").click()
0 голосов
/ 09 октября 2018

Вы можете использовать функцию xpath starts-with для решения этой проблемы.как:

//*[starts-with(., 'gprospect_linkedin_button')]
0 голосов
/ 09 октября 2018

Согласно сведениям о конфигурации (в вашем комментарии обновлении) ...

(Session info: chrome=69.0.3497.100) 
(Driver info: chromedriver=2.37.543627 (63642262d9fb93fb4ab52398be4286d844092a5e),platform=Windows NT 6.3.9600 x86_64) 

Ваша основная проблема - несовместимость между версиями двоичных файловвы используете следующее:

  • Вы используете chromedriver = 2,37
  • Примечания к выпуску chromedriver = 2,37 четко упоминается следующее:

Поддержка Chrome v64-66

  • Вы используете хром = 69,0
  • Примечания к выпуску ChromeDriver v2.42 явно упоминает следующее:

Поддержка Chromev68-70

Таким образом, существует явное несоответствие между ChromeDriver v2.37 и Chrome Browser v69.0

Решение

  • Обновление ChromeDriver до текущей ChromeDriver v2.42 уровень.
  • Сохранить Chrome версия между Chrome v68-70 уровней.( согласно примечаниям к выпуску ChromeDriver v2.42 )
  • Очистить ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Если ваша базовая Веб-клиент версия устарела, то удалите ее через Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-клиента .
  • Используйте следующую строку кода для вызова click() для нужного элемента:

    driver.find_element_by_xpath("//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']").click()
    
  • Выполните @Test.


Обновите A

Поскольку вы все еще видите NoSuchElementException после двоичного файланеобходимо обновить WebDriverWait , чтобы требуемый элемент был активным для клика следующим образом:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# other lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']"))).click()

Обновление B

Как выВы все еще не можете click(), вам нужно использовать метод execute_script() следующим образом:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# other lines of code
myElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']")))
driver.execute_script("arguments[0].click();", myElement)
0 голосов
/ 09 октября 2018

Фактическое имя класса: 'gprospect_linkedin_button gprospect_linkedin_button_style_medium'

find_element_by_class_name Функция предназначена для получения элемента по полному имени класса.

Вы можете попытаться найти его с помощью xpath так:

//button[contains(@class, 'gprospect_linkedin_button')];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...