Попробуйте следующее:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)
# find all elements with following xPath (returns a list of elelements)
buttons = driver.find_elements_by_xpath("//a[@class = 'playButton']") # using xPath
, или если вы хотите щелкнуть по одному элементу, используйте это:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get(url)
# wait(at least 10 seconds) for element will be clickable and clcick on it
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class = 'playButton']"))).click();
Здесь вы можете найти больше информация о местонахождении элементов.
Основанная на стеке атака переполнения буфера работает путем
Новое значение обратного адреса указывает на правильное место внутри вредоносного кода. Когда функция возвращается, она возвращается в вредоносный код, который начинает выполняться.
Но помните, что это в стеке. Если стек не является исполняемым, программа просто падает, не выполняя плохих вещей.
Теперь я понял, что означает исполняемый стек, компьютерные инструкции хранятся в разделе .text. Секции стека содержат аргументы функций, локальные переменные, мы также можем хранить инструкции, так как они являются байтовым кодом. Но по умолчанию CPU не будет выполнять инструкции, хранящиеся в стеке, поэтому, чтобы заставить CPU выполнять наш код, хранящийся в стеке, мы должны сказать, сделав стек исполняемым.
gcc -m32 -z execstack -o shell exploit.c