Доброй ночи дамы и господа. Недавно была тема на форуме, про то, как можно зарабатывать в интернете. Так вот сегодня хочу показать один из достаточно эффективных способов подзаработать неплохие деньги на рекламе на сайте.
[0] - Немного теории
Данный способ, в плохом его виде, для использования, давно крутится в интернете. Я и мой друг решили его автоматизировать и заставить зарабатывать его для нас деньги, и чтобы делал он это при минимальном нашем участии.
И тут возникает вопрос, как сделать, чтобы:
- Не палила рекламная сеть
- Сделать автоматизированным, чтобы работала сама по себе
Поизучив, как рекламные сети рассчитывают клики, показы и все такое и на основе найденной информации в интернете, пришли к тому, что хватает всего то лишь менять соксы, уже просто при подмене соксов, рекламная сеть не палит. Но для большей надежности, мы стали еще менять и User-agents. И тут уже, вероятность, что тебя спалят, ничтожно мала, только если будешь боршить.
[1] - Вектор атаки
Какие рекламные сети мы сейчас используем и где пока все успешно проходит. На данный момент, у меня несколько сайтов, и на информационных сайтах висят реклама от гугла и киносайты, где висит реклама от Adforce. Хотел все показать на примере одного сайта, но подумав решил все-таки не палить сайт, кто-то может бросить кто-то жалобу и все)).
Проблем еще не возникало, только в Адсенсе, где-то 20% не считает, в остальном все ок. Ниже скрин 1го киносайта с Adforce.
[2] - Техническая сторона
Как я уже выше писал, мы в итоге нашли способ для автоматизации, барабанная дробь – это Selenium + Python + PHP (Для парсинга и чекинга соксов).
Про Selenium (
Ссылка скрыта от гостей
) подробнее читать тут –
Ссылка скрыта от гостей
Вкратце объясню, как работает код. Парсер парсит соксы с определнного сайта, куда они выкладываются постоянно, после чего файл с соксами скармливаем Питон, где обрабатывается и по очереди, подставляя, каждый соксы заходит на сайт, не просто открывает сайт и заходит, а вбивает ключевое слово в поисковике, оттуда переходит на сайт, где еще шастает по 2-3 статьям и наконец кликает, цикл прошел успешно, и все повторяется заново, пока не закончатся соксы.
Ну и код соответственно выглядит такие образом. Все это в процессе разработки, так что, если у кого есть идеи прошу написать ниже:
Код:
import time
from random import choice
from random import uniform
from selenium.webdriver.common.action_chains import ActionChains
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
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import ElementNotVisibleException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import requests
def pref_data():
sokcs = ''
with open('socks.txt', 'r') as f:
socks = f.read()
socks = socks.split('\n')
r_ua = requests.get('http://site.ru/parser/useragents.html')
ua = r_ua.text.split('\n')
#r_socks = requests.get('http://site.ru/parser/socks5.html')
#socks = r_socks.text.split('\n')
return socks, ua
def set_pref(ua, socks):
socks = socks.split(':')
socks_ip = socks[0]
socks_port = int(socks[1])
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", socks_ip)
profile.set_preference("network.proxy.socks_port", socks_port)
profile.set_preference("network.proxy.socks_version", 5)
profile.update_preferences()
#profile.set_preference("general.useragent.override", ua)
#profile.update_preferences()
return profile
def init_driver(profile):
driver = webdriver.Firefox(profile) #profile
driver.wait = WebDriverWait(driver, 20)
return driver
def browse():
try:
driver.get("https://www.google.com/")
box = driver.wait.until(EC.presence_of_element_located(
(By.NAME, "q")))
button = driver.wait.until(EC.element_to_be_clickable(
(By.NAME, "btnK")))
box.send_keys("Ключевое слово")
try:
button.click()
except ElementNotVisibleException:
button = driver.wait.until(EC.visibility_of_element_located(
(By.NAME, "btnG")))
button.click()
except:
return 0
driver.implicitly_wait(60) #неявное ожидание по умолчанию
step = "step 1/7 "
print(step)
try:
driver.get(driver.find_element_by_xpath("//a[contains(text(),'Site')]").get_attribute('href'))
time.sleep(7)
links = ["След Сокола (1968)","Волк (2009)", "Выбор короля (2016)", "Меч короля Артура (2017)", "Прибытие (2016)"]
time.sleep(6)
link = driver.find_element_by_link_text(choice(links))
time.sleep(3)
link.click()
time.sleep(8)
step = "step 2/7 "
print(step)
down = driver.find_element_by_tag_name('body')
down.send_keys(Keys.END)
time.sleep(15)
#=========================================================== действие с баннерами
X = [800] #[370, 950]
Y = [400] #[414, 245]
banners = 0
actions = ActionChains(driver)
time.sleep(5)
actions.move_by_offset(X[banners], Y[banners]).click().perform()
step = "step 3/7 "
print(step)
time.sleep(15)
scroll_win = "window.scrollTo(0, {} );".format(int(uniform(50, 200)))
driver.execute_script(scroll_win)
time.sleep(25)
h = 0
step = "step 4/7 "
print(step)
for i in driver.window_handles:
h +=1
step = "step 5/7 " + "h = " + str(h)
print(step)
if h > 0:
time.sleep(10)
actions = ActionChains(driver)
actions.move_by_offset(int(uniform(30, 400)), int(uniform(20,280))).click().perform()
step = "step 6/7 "
print(step)
time.sleep(8)
scroll_win = "window.scrollTo(0, {} );".format(int(uniform(50, 500)))
driver.execute_script(scroll_win)
step = "step 7/7 "
print(step)
time.sleep(6)
#============================================================сохранение логов
log_str = ""
log_str = '\t' + "good - " + step + str(time.asctime() )+ '\n'
with open('log.txt', 'a') as f:
f.write(log_str)
time.sleep(10)
#________________________________________________________
except Exception as inst:
print(inst)
print("bad-----")
log_str = ""
log_str = '\t' + "bad - " + step + str(time.asctime() )+ '\n'
with open('log.txt', 'a') as f:
f.write(log_str)
if __name__ == "__main__":
socks, ua = pref_data()
l = len(socks)-1
print(l, socks)
step = "000"
log_str = ""
log_str = "<<< Start " + "soks = "+ str(l) + " --Date-- " + str(time.asctime() ) + '\n'
with open('log.txt', 'a') as f:
f.write(log_str)
for count in range(l):
try:
profile = set_pref(ua[count], socks[count])
driver = init_driver(profile)
browse()
#print("good+++++")
time.sleep(3)
except Exception as inst:
print(inst)
finally:
driver.quit()
time.sleep(10)
А с помощью это кода, парсим и чекаем соксики )):
PHP:
// TODO: Парсер и Чекер Socks5
require 'phpQuery.php';
$file = 'socks5.html';
$proxyList = [];
$url = 'https://www.socks-proxy.net/';
$html = file_get_contents($url);
$doc = phpQuery::NewDocument($html);
foreach ($doc->find('table tbody tr') as $one_tbl) {
$one_tbl = pq($one_tbl);
$ip = $one_tbl->find('td:eq(0)')->text();
$port = $one_tbl->find('td:eq(1)')->text();
$socks = $ip . ':' . $port;
//if (check('https://www.google.ru/', $socks))
$proxyList[] = $socks;
}
// запись в файл
if ($fp = fopen($file, "w")) {
for ($i = 0; $i < count($proxyList); $i++)
fwrite($fp, $proxyList[$i] . PHP_EOL);
fclose($fp);
}
echo '<pre>';
print_r($proxyList);
echo '</pre>';
Чекер в парсере работает не совсем корректно, можете предложить варианты реализации. Невалидных сейчас, исключает селениум сам, но там на проверку время тратится зря. Все это дело, работает не так быстро, как хотелось бы, но пока то что есть. Если не хотите, чтобы это происходило у вас на компе, тогда берем VPS на винде или линухе, только чтобы с рабочим столом была. И запускаем все это дело там, чтобы работала себе на фоне.
На этом у меня всем. Всем много денет!
Последнее редактирование: