我正在尝试(仍然)在 UC 模式下使用 SeleniumBase 克服 datadome 检测。我以为我已经拥有了它,但似乎 Datadome 正在发展,现在让我去验证码,在我用手滑动拼图块后,我被阻止了。我已附上代码,以防有人可以看到我可能遗漏的内容。您会注意到光标的一些睡眠和 pyautogui 移动,试图看起来更像人类 - 之前的版本(也被拒绝)没有这些行。预先感谢您的任何想法。(不确定为什么间距有点小,但在 pycharm 代码中没问题)
with SB(uc=True) as sb:
# Maximize window size
sb.maximize_window()
# Open up LOG IN screen
# REMOVED FOR A LITTLE ANONIMITY
# Accept cookies settings
sleep(2)
sb.click('button:nth-child(1)')
# Find Username field and enter it using stored value from credentials array
sleep(2)
sb.type("#p_lt_ContentWidgets_pageplaceholder_p_lt_zoneContent_CHO_Widget_"\
"LoginFormWith"\
"FullscreenBackground_XLarge_loginCtrl_BaseLogin_UserName", credentials[0][0])
# Find/enter user password
sleep(2)
sb.type('#p_lt_ContentWidgets_pageplaceholder_p_lt_zoneContent_CHO_Widget_'
'LoginFormWith'\
'FullscreenBackground_XLarge_loginCtrl_BaseLogin_Password', credentials[0][1])
sleep(2)
sb.click("#p_lt_ContentWidgets_pageplaceholder_p_lt_zoneContent_CHO_Widget_"
"LoginFormWithFullscreen"\
"Background_XLarge_loginCtrl_BaseLogin_LoginButton")
sleep(5)
# print("MSG035 Unable to Select LOG ON Button")
print("Title = ", sb.get_title())
#
pyautogui.moveTo(100, 100)
sb.click("#p_lt_ContentWidgets_pageplaceholder_p_lt_zoneSM30_CHO_Widget_"\
"QuickLinkMenu"\
"_Small_rptItems_ctl03_hrefLink")
# Switch Focus to new window - leave original window to preserve session
sb.switch_to_newest_window()
pyautogui.moveTo(525, 121)
# Move down
sleep(1)
pyautogui.moveTo(534, 155, 1)
pyautogui.click()
pyautogui.moveTo(525, 121)
# Move down to make/change tee times
sleep(1)
pyautogui.moveTo(534, 155, 1)
print("Drop Down")
# Select/hover over the Button after sleeping for 3 seconds
sleep(3)
#sb.slow_click("span:nth-child(1)")
sb.slow_click('//*[@id="rwdNav"]/ul/li[1]/ul/li[1]/a/span')
sleep(1)
pyautogui.moveTo(534, 155, 1)
# Select option
print("Select drop down option")
sleep(3)
sb.slow_click("li:nth-child(1)")
sleep(10)
sb.close()
有时,当访问需要较长时间加载的站点时,默认的
reconnect_time
在 SeleniumBase UC 模式下是不够的。您可以自定义它。这是一个在开始时执行此操作的示例脚本:
from seleniumbase import SB
with SB(uc=True, incognito=True, test=True) as sb:
sb.driver.uc_open_with_reconnect("https://pixelscan.net/", 11)
sb.remove_elements("jdiv") # Remove chat widgets
sb.assert_text("No automation framework detected", "pxlscn-bot-detection")
sb.assert_text("You are not masking your fingerprint")
sb.highlight("span.text-success", loops=10)
sb.sleep(1)
sb.highlight("pxlscn-fingerprint-masking div", loops=10, scroll=False)
sb.sleep(1)
sb.highlight("div.bot-detection-context", loops=10, scroll=False)
sb.sleep(3)
如果将 SeleniumBase UC 模式与
pyautogui
混合,请在运行 pyautogui
命令之前先调用此模式:
driver.disconnect()
然后使用
pyautogui
命令完成后,调用此命令再次使用 Selenium:
driver.connect()
请注意,如果您正确执行了所有操作,您甚至可能根本不需要使用
pyautogui
。