各位大大好,最近練習網頁爬蟲中,有一個我平常反覆做的事情想拿來試試
就是看廣告抽獎,從登入帳號到點選廣告開始播放都已經寫好了可以順利運行。
但是有一個問題是廣告看完後要點選X關閉廣告(如圖)
那我用F12查看它的網頁標籤發現它是一個img src 沒有其他標籤可以供我選取了。我就用xpath的方式來抓
抓到的路徑為/html/body/div/img[3]
完整輸入進python裡面就是
driver.find_element_by_xpath("/html/body/div/img[3]").click()
卻顯示NoSuchElementException錯誤
不知道是哪邊設定錯了,還是我用XPATH抓取的方法有誤
是否有解決方法呢
哈哈
我也有做這個XD
"點選X關閉廣告"的部分我 CSS Selectors 是這樣寫,給你參考:
'#google-rewarded-video > img:nth-child(4), ' +
'#close_button #close_button_icon, ' +
'.videoAdUiSkipButtonExperimentalText'
但因為它廣告其實有幾種不同的版面,所以我上面的寫法有時候還是會沒成功。
(也要注意上面網友提到的 sleep)
補充:
可能跟你想問的有關,網頁它是使用 iframe 標籤來內嵌廣告,所以要先 switch_to.frame()
切換到 iframe 內,才能定位到裡面的元素。
參考:https://stackoverflow.com/questions/44834358
提醒~
有些新商品第一次看廣告前會需要回答問題(只有第一次),不然無法觀看廣告,目前我是自己手動點啦XD
感覺你跟我試的網站根本一樣XD 我改成CSS SELECTOR方法試試
回答問題我還沒去研究 目前也是先自己點XD
然後他有時候廣告會有不一樣多跳一個要確認的視窗那種,我還要研究怎麼應付這種情形哈哈哈
你也是巴哈的,對吧XD
是指"繼續有聲播放"這種嗎?
我是用
.videoAdUi .rewardDialogueWrapper:last-of-type .rewardResumebutton
像是 5 秒內沒抓到此 CSS 就跳過 (因為其他廣告沒有這個確認視窗)
啊 對了
可能跟你想問的有關,它是使用 iframe 標籤來內嵌廣告,所以要先 switch_to.frame()
切換到 iframe 內,才能定位到裡面的元素。
https://stackoverflow.com/questions/44834358
我覺得可能的原因是,點擊的元件的時候,網頁的廣告還沒長出來,看要不要做個等待的動作或用sleep幾秒先看看點不點的到。
另外xpath我推薦可以寫成 //div[@id='google-rewarded-vedio']/img[3],先試試看有問題再討論!
你可以試試看在 devtool 中對著你的目標物件 【右鍵】>【Copy】>【Copy Xpath】來抓他的絕對路徑,自己寫有時候可能中間會漏節點,導致 Selenium 在抓的時候判斷錯誤
然後先在不隱藏 Chrome Driver 的情況下測試看看是否有上面幾位大大提到的 AD 還沒跳出的情況。
或者就是在 Exception 出現的時候,用 Chrome Driver 開 Dev Tool 來找找看該物件是不是真的沒出現
XPATH有分成完整路徑跟一般路徑
我抓一般路徑是
//*[@id="google-rewarded-video"]/img[3]
完整路徑是
/html/body/div/img[3]
同樣貼到
driver.find_element_by_xpath("")裡面一般路徑會Invaild syntax
所以我都貼完整路徑就不會顯示了,但是會有NosuchElement error
是不能這樣貼嗎