Почему селен не может найти раздел комментариев Disqus? - PullRequest
0 голосов
/ 30 сентября 2018

Привет

Я создал несколько сценариев селена ранее на python, и они работают нормально, но не знаю, почему он не работает на веб-сайте.Я пытаюсь нажать на элемент, который появляется, когда на этом сайте загружается «DISQUS». Disqus - это раздел комментариев на веб-сайте, который загружается после загрузки веб-сайта.

Поэтому я использовал метод сна, но он не работал, поэтому я попробовал его с помощью Python IDLE для выполнения строки кода один за другимтак что я могу запустить locate code, как только Раздел комментариев Disqus полностью доступен, но все еще получает ту же ошибку.«Webdriver не может найти элемент»

Вот мой код.

import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Chrome('E:\\ChromeDriver\\chromedriver_win32\\chromedriver.exe')
browser.get('https://www.eloanus.com/customers-review')	
dicuss = browser.find_element_by_class_name('textarea')
print(dicuss)

Ошибка, я получаю.

Traceback (most recent call last):
  File "C:\Users\Acer-573G\PycharmProjects\Appium\venv\import selenium.py", line 12, in <module>
    dicuss = browser.find_element_by_class_name('textarea')
  File "C:\python3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 563, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\python3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 966, in find_element
    'value': value})['value']
  File "C:\python3.5\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\python3.5\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"textarea"}
  (Session info: chrome=69.0.3497.100)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64)

Я прикрепил снимок экрана с элементом проверки (классом) с этого веб-сайта.

Снимок экрана с проверкой элемента

Я новичок в программировании, любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Для отправки последовательности символов в раздел комментариев Disqus вам необходимо:

  • Induce WebDriverWait для нужного родителя доступный кадр и переключение на него
  • Индуцирование WebDriverWait для желаемого вложенного кадра, доступного и переключение на него
  • Индуцируйте WebDriverWait для желаемого элемента, который можно кликать , и вы можете использовать следующее решение:
  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    browser=webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    browser.get('https://www.eloanus.com/customers-review') 
    WebDriverWait(browser, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='disq2disqusCommentsHolder']")))
    WebDriverWait(browser, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id,'dsq-app') and @title='Disqus']")))
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='textarea'][contains(@aria-label,'Join the discussion')]"))).send_keys("Michael Berger")
    
  • Снимок браузера:

Disqus_comment_section

0 голосов
/ 30 сентября 2018

Есть несколько iframes , поэтому вам нужно переключиться на него, прежде чем вы хотите взаимодействия.

Это всегда хорошая практика, если вы переключите управление драйвером по умолчанию, как только вы закончите.

Код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Chrome(executable_path = r'D:/Automation/chromedriver.exe')
driver.maximize_window()
driver.get("https://www.eloanus.com/customers-review")

wait = WebDriverWait(driver, 20)

visibilty_login = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Log In']")))

action = ActionChains(driver)

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id$='disqusCommentsHolder']")))

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[title='Disqus']")))

driver.execute_script("window.scrollTo(0, 100)") 

wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Join the discussion…']/following-sibling::div[@class='textarea']"))).send_keys("Hi")

driver.switch_to.default_content()  

Надеюсь, это поможет.

...