scrapy -splash, почему я не могу использовать element.click (), чтобы щелкнуть элемент ?? (element.click () не работает) - PullRequest
0 голосов
/ 17 января 2019

После запуска службы заставки я захожу на порт службы заставки на веб-странице (http://192.168.99.100:8050)

Запустив мой lua_script, я хочу зайти на веб-страницу QQ (популярное приложение для китайского чата) и автоматически удалить соответствующие комментарии (которые я выбрал)

но когда я запускаю свой скрипт, я нахожу проблему: element.click или element: mouse_click {} не работает !?

Сначала я хочу объяснить свой код, а затем снова поднять свой вопрос. Если вы действительно хотите помочь плз прочитать до конца! Я действительно ценю это!

1.Первый вход на страницу
2. Во-вторых, я хочу найти подходящие комментарии и удалить все это. это часть веб-страницы, когда я вхожу в систему (чёрт, я не могу опубликовать изображение ......)

элемент: div.comments-контент enter image description here

мы можем видеть, что он содержит элемент a[class='nickname name c_tx q_namecard'] и a.act-delete[data-cmd='qz_delete'] элемент a.act-delete[data-cmd='qz_delete'] является невидимым , если мышь не наведена на div.comments-content, поэтому я выбираю элемент a[class='nickname name c_tx q_namecard'] , который находится внутри div.comments-content для наведения мыши

и еще одна вещь, которую вы должны знать, это то, что не все комментарии могут быть удалены мной, поэтому количество кнопок удаления отличается от комментариев. необходимо записать индекс комментария, который должен быть удален, и индекс кнопки удаления, который соответствует комментарию, который должен быть удален. (.... я не знаю, разъясню ли я .....)

local content={} --record the matched comment
local text = splash:select_all("div.comments-content") -- select comment div
local comment = splash:select_all("a[class='nickname name c_tx q_namecard']")
-- select comment
local delete = splash:select_all("a.act-delete[data-cmd='qz_delete']")
-- select delete button
local  t = {} -- save all comments texts
local g={} -- save comments that i can delete
local i=0 -- count
local child -- check the delete button node of 
local commentloc= {} --record the index of comments that should be deleted 
local info -- return self-edited information
local deleteloc = {} -- record the index of the  delete button of comments that should be deleted
--count how many comments i can delete
for _, item in ipairs(delete) do
  g[#g+1]=item:text()
end
for _ ,item in ipairs(text) do
  t[#t+1] = item:text() -- save all comments in the format->[nickname,comments,time]
child = item.lastChild.lastChild --find a comment and check whether i can delete it("删除" in English means delete)
  if child:text()=="删除" then
    i = i+1
  end
  -- find if the comments meet the requirements (i wanna delete comments contain 'acjeismmsekks','test'and '@' whose length is larger than 130)
  if (string.find(item:text(),"acjeismmsekks") or string.find(item:text(),"test") or ( string.len(item:text())>130 and 
string.find(item:text(),"@") ))  then
   deleteloc[#deleteloc+1] = i  --record which controllable comment to delete
   commentloc[#commentloc+1] = _ --record the location of the comment 
   content[#content+1]=item:text() --record the matched comment to count
  end
end -- for _ ,item in ipairs(text) do
-- a flag to indicate whether to find or not
local flag="not match!"
if #content >0 then
  flag="find "..tostring(#content).." matched comments"
end
i=1 -- reset the i
-- begin to delete matched comments
while( i <= #deleteloc) do
-- hover on the element a[class='nickname name c_tx q_namecard'] to make
delete button visible
  text[commentloc[i]]:mouse_hover{x=0,y=0}
-- click the delete button
  delete[deleteloc[i]].click()
-- hold on a second 
  splash:wait(0.5)
-- select the confirmation button to delete
  if splash:select("a[class='qz_dialog_layer_btn qz_dialog_layer_sub']") then
   --this is where the problem occurs    
   splash:select('a[class="qz_dialog_layer_btn qz_dialog_layer_sub"]').click()
   info="confirmation button clicked!"
  else
   info = "no confirmation button!"
  end -- splash:select...
   i=i+1  
end -- for    

Теперь, если вы понимаете, что я делаю, я хочу выяснить, почему код (splash: select ('a [class = "qz_dialog_layer_btn qz_dialog_layer_sub"]'). Click ()) не работает? Кажется, ничего не щелкает ..

каждый раз, когда я запускаю скрипт, я получаю png ниже, показывающий, что я не нажимал кнопку подтверждения, и , конечно, я проверял только вручную, чтобы найти, что комментарии все еще там не восстановлены

всплывающее окно подтверждения
confirmation popup window (содержимое окна на английском языке означает: Вы уверены, что хотите удалить комментарий? слева btn: да справа btn: нет)

Но если есть более одного совпавшего комментария, первый комментарий будет удален, оставив остальные без изменений

так странно! .....

Если у вас есть какие-либо вопросы, пожалуйста, оставьте свои комментарии ниже, я проверяю этот вопрос каждые несколько часов. И я действительно хочу решить эту проблему, потому что она удерживает меня на 3 дня ~ ... Спасибо за вашу помощь!

...