2016-12-07 26 views
0

pythonでセレンを使用してchromeでiensというWebサイトにアクセスします。私のスクリプトは "Volgende"(オランダの "Next"を意味します)をクリックして、次のページに移動します。しかし、私は、次のエラーメッセージが表示されます。python + seleniumを使用してボタンをクリック

selenium.common.exceptions.WebDriverException: Message: unknown error: 
Element is not clickable at point (853, 667). Other element would 
receive the click: <div class="cookiePolicy-content">...</div> 

私は何かが、セレンは、ウェブサイトを入力したときにポップアップクッキーに関する間違っ起こっていると推定します。これまでのところ、私はクッキーを通過するために私ができることを見つけることができませんでした。これまで

私のコードは:https://www.iens.nl/restaurant+utrecht

+0

を働く確認しましたビューでは、クッキーポリシーメッセージはボタン上に浮かぶのでクリックできません。 – Corporalis

答えて

2

はい、これは、下部にCookie浮動フッタがあるためです。 Seleniumはあなたのボタンをビューにスクロールしますが、それはクッキーフローティングdivの上にスクロールする必要があることを認識しません。

私は、クッキーメッセージの閉じるボタンをクリックするか、クッキーメッセージの背後から要素をスクロールすることをお勧めします。

クッキーを閉じるには、[閉じる]をクリックし、それが消えるのを待ちたいとしている:

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


chrome_path = '/Users/username/Downloads/chromedriver' 
driver = webdriver.Chrome(chrome_path) 
driver.get('https://www.iens.nl/restaurant+utrecht') 

# Wait for cookie message 
close_icon = WebDriverWait(driver, 5, 0.25).until(ec.visibility_of_element_located([By.CSS_SELECTOR, '.cookiePolicy-close'])) 
close_icon.click() 
# Wait for cookie message to disappear 
WebDriverWait(driver, 5, 0.25).until(ec.invisibility_of_element_located([By.CSS_SELECTOR, '.cookiePolicy-close'])) 
link = driver.find_element_by_link_text("Volgende") 
link.click() 

クッキーのメッセージの後ろから要素をスクロールするには:

編集:それはこのページにもフローティングヘッダーがあるようですので、実際にはページの上部にスクロールできません。クッキーメッセージの後ろからスクロールする必要があります。

from selenium import webdriver 

chrome_path = '/Users/username/Downloads/chromedriver' 
driver = webdriver.Chrome(chrome_path) 
driver.get('https://www.iens.nl/restaurant+utrecht') 

link = driver.find_element_by_link_text("Volgende") 
# Scroll to element as Selenium would 
driver.execute_script('arguments[0].scrollIntoView(false);', link) 
# Then scroll it up to get it out from behind the message 
driver.execute_script('window.scrollBy(0, 200)') 
link.click() 

編集:私はあなたはそれがセレン試みがにVolgendeボタンをスクロールする場合でもので、クッキーポリシーメッセージは、クリックイベントを受信しますというメッセージを見れば、これらのオプションの両方が

+0

ありがとうございました!それはあなたのためにあまりにも多くの時間ではない場合;プログラムが最後のページに来るまで、次のページをクリックするループを書くにはどうすればよいですか? – titusAdam

+1

各ページを巡回する必要がありますか?または、最後のページに移動したいだけですか?最後のページの '次へ'ボタンのすぐ隣にリンクがあります –

+1

ページを巡回する必要がある場合、 'driver.get'の下にあるすべてのものをwhileループ... 'while driver.find_element_by_css_selector( 'li.next')ではなく、無効になっています。get_attribute( 'class'): ' –

0

driver_find_element_by_link_text()の代わりにこれを試してみてください:

driver.find_element_by_xpath('//*[@id="pagination_results"]/div/div/ul/li[14]/a'); 
0

セレンは、実際のユーザーの行動をシミュレートしようとし

from selenium import webdriver 

chrome_path = '/Users/username/Downloads/chromedriver' 
driver = webdriver.Chrome(chrome_path) 
driver.get('https://www.iens.nl/restaurant+utrecht') 

link = driver.find_element_by_link_text("Volgende") 
link.click() 

これはウェブサイトです。つまり、可視の要素のみをクリックできます。要素を表示するために要素を表示する必要があります。

link = driver.find_element_by_link_text("Volgende") 
ActionChains(driver).move_to_element(link).perform() 
link.click() 
+0

Seleniumは自動的にビューポートに要素をスクロールしてからクリックします。彼が持っている問題は、セレンが説明しない浮動要素の後ろにあることです。 –

関連する問題