Сначала попытайтесь не использовать широкую попытку / исключение.
Чтобы иметь возможность больше устранять неполадки в вашем коде, вы должны как минимум регистрировать исходную ошибку.
try:
..some code..
except Exception as e:
print('Semething went wrong.')
print("Caught Exception type {} with err.msg: {}".format(type(e), e))
Просматривая код, который вы используете:
find_element**s**_by_xpath
Какой селен вернет вам список элементов.
Либо измените код для использования одного элемента:
find_element_by_xpath
Или передайте индекс, который вам нужен при попытке нажать
Например, в вашем коде:
cimg = driver.find_elements_by_xpath('//div[@class="XXcuqd" and contains(@style,"transform: translateY(0px)")]/div/div/div')
print('cimg crossed')
hover(driver, '//div[@class="XXcuqd" and contains(@style,"transform: translateY(0px)")]')
print('hover crossed')
cimg[0].click()
print('contact image clicked successfully')
EDIT:
Я посмотрел на ваши xpaths, и они сбивают с толку и возвращают несколько элементов. Из вашего заявления print () я предполагаю, что вы хотите нажать на изображение контакта, чтобы включить флажок?
Если это так, вам не нужно наводить курсор на элемент, прежде чем щелкнуть по нему. Вы можете просто использовать JS-скрипт, чтобы щелкнуть по нему.
Я изменил ваш xpath с помощью css_selector и попробовал сам.
cimg = driver.find_elements_by_css_selector('.XXcuqd [role="checkbox"]')
Поскольку этот код возвращает список, не забудьте передать индекс контакта, по которому вы хотите щелкнуть.
В приведенном ниже случае я нажму первый, используя JS-скрипт:
driver.execute_script("arguments[0].click();", cimg[0])
Тогда ваш код может выглядеть так:
print('Entered in try block')
time.sleep(1)
clink = wait20.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.ncJ6qe a')))
clink.click()
print('contact link clicked')
time.sleep(3)
cimg = driver.find_elements_by_css_selector('.XXcuqd [role="checkbox"]')
print('cimg crossed')
driver.execute_script("arguments[0].click();", cimg[0])
print('contact image clicked successfully')
Дополнительно
Вы можете проверить, действительно ли установлен флажок, проверив атрибут:
if cimg[0].get_attribute('aria-checked') == 'true':
print('contact image clicked successfully')
else:
raise AttributeError("Fail to select the contact image")