Эта проблема в основном связана с проверкой входа в систему каждой платформы или сканера илиselenium
профилактическая мера。В связи с улучшением технологии защиты от сканирования различных веб-сайтов.,общепринятыйselenium
Не могу пройти проверку слайдера,Ниже представлены общие идеи проверки слайдера.,Для справки:
size
и прямоугольный элемент, в котором он расположенsize
便能得到滑块的偏移量selenium
в библиотекеactionChains
вclick_and_hole
иmove_by_offset
для управления действием ползункаПолучите смещение Offx в зависимости от размера самого слайдера и размера элемента div, в котором находится слайдер.
slide1_back = self.find_ele_is_presence(_slide1_back_locate)
slide1_span = self.find_ele_is_presence(_slide1_span_locate)
Получить начальную координату ползунка
start_location = slide1_span.location
# Получите длину и ширину полосы, на которой расположен ползунок.
background_size = slide1_back.size
4. Диапазон скольжения ползунка [абсцисса исходного положения минус ширина слайда]. Поскольку это сдвиг, ордината не меняется.
x_location = background_size["width"] - start_location["x"]
y_location = start_location["y"]
def ease_out_quad(x):
return 1 - (1 - x) * (1 - x)
def ease_out_quart(x):
return 1 - pow(1 - x, 4)
def ease_out_expo(x):
if x == 1:
return 1
else:
return 1 - pow(2, -10 * x)
def get_tracks(distance, seconds):
"""
:param distance: offset
:param seconds: тянуть время
:return:
"""
tracks = [0]
offsets = [0]
# print("np_value:", np.arange(0.0, seconds, 0.1))
for t in np.arange(0.0, seconds, 0.1):
offset = round(ease_out_quart(t / seconds) * distance)
tracks.append(offset - offsets[-1])
offsets.append(offset)
return offsets, tracks
К сожалению, условия обнаружения слайдера на некоторых веб-сайтах чрезвычайно суровы и неуловимы. Даже если для имитации скольжения реального человека используются случайные паузы, изменения ускорения и другие операции, они все равно не могут пройти проверку. Есть подозрение, что она будет решена с помощью искусственного интеллекта.
Прокрутка с помощью JS
Потому что обычно полосы прокрутки не отображаются как отдельные компоненты.,Скорее, это вассал в определенномdiv
илиtable
начальство,Когда эти элементы отображают слишком много контента, автоматически появляются полосы прокрутки.,Так что сложно пройтиselenium
позиция тогдаactionChains
Вызов методов для управления прокруткой страницы путем перетаскивания,нужно пройтиJS
Завершение работы полосы прокрутки。
Общий JS
def test_scroll_to():
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--start-maximized')
driver = webdriver.Chrome(chromeOptions)
driver.get('https://www.jd.com/')
n=1
while True:
# driver.execute_script(f"document.body.scrollTop = {100*n};")
driver.execute_script(f"window.scrollTo({(n-1)*50}, {n*50})")
n+=1
document.querySelector('.page-content').scrollTo(0,300)
document.querySelector('.ant-table-content').scrollTo(-100,0)
Найдя компонент со встроенной полосой прокрутки, а затем используя ScrollTo(x,y) для прокрутки.