Как щелкнуть в любом месте веб-сайта, чтобы закрыть опцию (Selenium)

#python #python-3.x #selenium #web-scraping

Вопрос:

вот ссылка на веб-сайт : веб-сайт

Как вы можете видеть, есть возможность выбрать даты, но меня это не интересует, я хотел бы выполнить некоторые операции на веб-сайте, но перед этим мне нужно закрыть эту опцию. Как я мог это сделать ?

вот мой сценарий :

 import requests
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select

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

from selenium.webdriver.common.keys import Keys

PATH = "driverchromedriver.exe"

options = webdriver.ChromeOptions() 
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1200,900")
options.add_argument('enable-logging')


driver = webdriver.Chrome(options=options, executable_path=PATH)
 
wait = WebDriverWait(driver, 20)

driver.get('https://fr.hotels.com/ho344560/?q-check-in=2021-06-26amp;q-check-out=2021-06-27amp;q-rooms=1amp;q-room-0-adults=2amp;q-room-0-children=0amp;sort-order=BEST_SELLERamp;WOD=6amp;WOE=7amp;JHR=1amp;FPQ=2amp;MGT=1amp;ZSX=0amp;SYE=3amp;YGF=1')
driver.maximize_window()
time.sleep(2)

driver.find_element_by_xpath("//body").click()
time.sleep(2)

wait.until(EC.visibility_of_element_located((By.XPATH, '//button[@class="uolsaJ"]'))).click()

reviews = driver.find_element_by_xpath('//*[@span="k3LKyj"]')
reviews.click()
 

И вот в чем ошибка :

 selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button class="uolsaJ" aria-label="..." type="button">Acceptez</button> is not clickable at point (217, 701). Other element would receive the click: <div class="_1a95Jj _2w3czg kY8QGj ">...</div>
 

Похоже, что сценарий ничего не находит из-за этой опции. Это как бы мешает написанию сценария.

Ответ №1:

Проблема с кодом

  1. Вы пытаетесь нажать на страницу еще до того, как закроете режим выбора даты.
  2. Ваши локаторы неверны.

Ниже приведен обновленный код

 
driver.get(
    'https://fr.hotels.com/ho344560/?q-check-in=2021-06-26amp;q-check-out=2021-06-27amp;q-rooms=1amp;q-room-0-adults=2amp;q-room-0-children=0amp;sort-order=BEST_SELLERamp;WOD=6amp;WOE=7amp;JHR=1amp;FPQ=2amp;MGT=1amp;ZSX=0amp;SYE=3amp;YGF=1')
driver.maximize_window()
time.sleep(5)

webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
# driver.find_element_by_css_selector("body[class='modal-open-menu']").click()
time.sleep(2)

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'button[class="uolsaJ"]'))).click()

reviews = driver.find_element_by_css_selector('span[class="k3LKyj"]')
reviews.click()
driver.close()
 

Я предполагаю, что ты Guest Review наконец-то захочешь нажать на кнопку.

Комментарии:

1. Однако это не открывает обзор

2. reviews = driver.find_element_by_xpath('//a[@class="WxdyDo _3ZW5IO"]') reviews.click()

3. Я думаю, вам нужно использовать правильный локатор и попробовать еще раз. Это должно сработать

4. Ваш локатор работает, но, поскольку вы не выполняете никаких дальнейших действий, вы не можете его заметить.

Ответ №2:

Я сделал что-то подобное, и это сработало:

Причина в том, что я пытаюсь нажать на 10, 10 координат

 driver.maximize_window()
driver.get('https://fr.hotels.com/ho344560/?q-check-in=2021-06-26amp;q-check-out=2021-06-27amp;q-rooms=1amp;q-room-0-adults=2amp;q-room-0-children=0amp;sort-order=BEST_SELLERamp;WOD=6amp;WOE=7amp;JHR=1amp;FPQ=2amp;MGT=1amp;ZSX=0amp;SYE=3amp;YGF=1')
wait = WebDriverWait(driver, 10)
ActionChains(driver).move_by_offset(10 , 10).click().perform()
wait.until(EC.visibility_of_element_located((By.XPATH, '//button[@class="uolsaJ"]'))).click()
 

Импорт :

 from selenium.webdriver.common.action_chains import ActionChains
 

Ответ №3:

Я думаю, что основной подход состоит в том, чтобы попытаться освободить элемент для нажатия, чтобы вы закрыли экран даты, так как, когда кто-то открывает эту страницу, вот код, который сработал для меня:

 from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

path = "path to chromedriver"

driver = webdriver.Chrome(path)
url = "https://fr.hotels.com/ho410456/?q-rooms=1amp;q-room-0-adults=2amp;q-room-0-children=0amp;modal=dp"
action = ActionChains(driver)
driver.get(url)
sleep(2)
passDate = driver.find_element_by_class_name("modal-container")
action.click(passDate).perform()
 

я надеюсь, что это было полезно.