iT邦幫忙

0

詢問使用Python Selenium網頁爬蟲關閉第一次進入Shopee的彈出視窗

  • 分享至 

  • xImage

蝦皮元素與程式碼圖片
程式碼如下 : (嘗試使用 XPATH 與 Class_name都沒有辦法關閉) /images/emoticon/emoticon06.gif
錯誤訊息顯示TimeoutException,將(driver, 10)更改為(driver, 30)後還是相同。
因卡了很久詢問各位大大該如何解決,謝謝!

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
import time

設定開啟網頁

PATH = ("C:/Users/User/Desktop/msedgedriver.exe")
driver = webdriver.Edge(PATH)
driver.get("https://www.google.com.tw/")

等待網頁開啟

WaitForPageOpen = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.NAME, "q"))
)

點選輸入

Google_Search = driver.find_element(By.NAME, "q")
time.sleep(1)
Google_Search.click()

尋找輸入位置並輸入按下Enter

Search1 = driver.find_element(By.NAME, "q")
time.sleep(1)
Search1.send_keys("shopee")
Search1.send_keys(Keys.RETURN)

等待搜尋蝦皮頁面開啟

WaitForPageOpen2 = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.ID, "center_col"))
)

點選進入蝦皮頁面

Click2 = driver.find_element(
By.CLASS_NAME, "VuuXrf")
Click2.click()

等待蝦皮頁面開啟

time.sleep(2)
WaitForPageOpen3 = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.ID, "main"))
)

等待廣告出現

wait_for_ad = WebDriverWait(driver, 30).until(
EC.presence_of_element_located(
(By.CLASS_NAME, "home-popup__close-button")
)
)

關閉廣告

close_ad_button = driver.find_element(
By.CLASS_NAME, "home-popup__close-button")
close_ad_button.click()

obarisk iT邦研究生 1 級 ‧ 2023-03-11 09:15:20 檢舉
去看一下這個是不是每次都一樣

```
Click2 = driver.find_element(
By.CLASS_NAME, "VuuXrf")
Click2.click()
```
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
ccutmis
iT邦高手 2 級 ‧ 2023-03-11 10:14:53
最佳解答

改用 ActionChains 試試?

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

...略...

action = ActionChains(driver)
action.pause(5).perform()
action.click(on_element=driver.find_element(By.XPATH,'/html/body/div[1]/div/header/div[2]/div/a')).perform()

image

可以從開發者面板中看到,它是在中間廣告區用一個超連結包起來,對它來說使用者只有兩條路:

  1. 點廣告
  2. 點非廣告區

所以換個思路,你要點的不是那個(x),而是要點廣告框以外的地方。

這邊利用了 ActionChains 模擬滑鼠點擊 左上角的蝦皮購物logo連結,我這邊測試過是ok的。

註: 我用 Selenium+Chrome 測試,換到 Edge 或許語法略有不同,但邏輯應該是一樣的。

0
jhdigitech
iT邦見習生 ‧ 2023-04-20 10:10:10

最簡單就是refresh
但是樓上的才是終極辦法!!!
可以參考
https://selenium-python.readthedocs.io/api.html#selenium.common.exceptions.WebDriverException
driver.get("https://shopee.tw/")
driver.refresh()
sleep(2)
driver.refresh()
sleep(2)
driver.refresh()

我要發表回答

立即登入回答