【发布时间】:2022-01-01 10:58:08
【问题描述】:
我有一个代码可以自动点击带有代理 TOR 的 Selenium e Firefox 页面底部的“显示更多”按钮,但出现错误:
raise TimeoutException (message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
代码好像写的不错,不明白是什么问题。为了更清楚起见,我还与我使用的代理共享连接(一切正常,工作正常),然后在出现错误的地方自动单击按钮的代码。你能帮我吗?谢谢
PS:代码被设置为在“显示更多”按钮上单击多次,因为如果您第一次单击“显示更多”,页面会进一步向下滚动,但随后我又得到第二个“显示更多” “ 按钮。有时甚至是第三个“显示更多”。所以我还想在加载时点击第二个和第三个“显示更多”。
更新: cookie 屏幕是阴暗的,有阴影的,几乎是透明的黑色,所以也许这就是您的代码无法正常工作的原因。可能是 Tor 连接阻止了 cookie 的正常显示,你无法按下按钮(我想,也许,我不知道)
将 Firefox 与 Proxy Tor 连接的代码
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
import os
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
#Connect Firefox with Proxy Tor
torexe_linux = os.popen('/home/xxxx/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US')
profile = FirefoxProfile('/home/xxxx/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/profile.default')
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.socks', '127.0.0.1')
profile.set_preference('network.proxy.socks_port', 9050)
profile.set_preference("network.proxy.socks_remote_dns", False) #certi la tengono True
profile.update_preferences()
firefox_options = webdriver.FirefoxOptions()
firefox_options.binary_location = '/usr/bin/firefox'
driver = webdriver.Firefox(
firefox_profile=profile, options=firefox_options,
executable_path='/usr/bin/geckodriver')
driver.get("link")
driver.maximize_window()
自动点击代码(问题在这里)
from selenium.webdriver.common.action_chains import ActionChains
driver.implicitly_wait(12)
wait = WebDriverWait(driver, 12)
actions = ActionChains(driver)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button#onetrust-accept-btn-handler"))).click()
while(driver.find_elements_by_css_selector('a.event__more.event__more--static')):
show_more = driver.find_element_by_css_selector('a.event__more.event__more--static')
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
actions.move_to_element(show_more).perform()
time.sleep(0.5)
show_more = driver.find_element_by_css_selector('a.event__more.event__more--static')
show_more.click()
time.sleep(3)
【问题讨论】:
-
这意味着它会消失并且没有更多的显示更多按钮。
-
@ArundeepChohan 你是什么意思?该按钮的字面意思是“Mostra più incontri”。你能帮我解决吗?谢谢
-
如果您多次单击它,它会停止显示并且不再出现。然后你的代码超时。只需将其包装在尝试中,然后再中断。
-
@ArundeepChohan 我确保您单击了几次,因为每次单击“显示更多”时,页面滚动得更低,但随后会出现另一个“显示更多”。由于我是 Python 新手,您能告诉我答案中的代码吗?我当然会投票给你。谢谢
标签: python python-3.x selenium selenium-webdriver selenium-chromedriver