Использование WatiN для загрузки аватара на YouTube - PullRequest
1 голос
/ 31 декабря 2011

Я пытаюсь автоматизировать процесс загрузки изображения, чтобы установить его в качестве аватара на YouTube.Пока у меня есть программа, заходящая на YouTube, идущая на страницу канала и затем нажимающая кнопку «Редактировать канал».

Однако я не могу заставить процесс загрузки файла работать.Первоначально я использовал этот код:

public FileUpload AvatarFileUpload
{
    get
    {
        return Document.FileUpload(Find.ByName("image") && Find.ById("image-upload-file-input"));
    }
}

AvatarFileUpload.Set(AvatarLocation);

Это открывало диалоговое окно загрузки файла и вводило путь к изображению, которое нужно было загрузить, однако на самом деле не загружало фотографию.

Я успешно использовал этот код для загрузки файлов на другие веб-сайты, поэтому это не проблема для объекта FileUpload WatiN.

Это связано с тем, что на YouTube есть кнопка фальши, которая скрывает фактический объект формы файла, а затем использует jQuery или что-то еще для завершения процесса.

После некоторого копания я могу сказать,что объект загрузки файла находится в его собственной форме, а действие этой формы - скрытый iframe на странице.

Итак, я попытался использовать этот код для загрузки файла, отправки этой формы, а затем отправки основной формы.но это тоже не работает.

public FileUpload AvatarFileUpload
{
    get
    {
        return Document.FileUpload(Find.ByName("image") && Find.ById("image-upload-file-input"));
    }
}

public Form ImageUploadForm
{
    get
    {
        return Document.Form(Find.ById("image-upload-form"));
    }
}

public Form ChannelsPageEditorForm
{
    get
    {
        return Document.Form(Find.ById("channels-page-editor-form"));
    }
}

AvatarFileUpload.Set(AvatarLocation);
System.Threading.Thread.Sleep(5000);
ImageUploadForm.Submit();
System.Threading.Thread.Sleep(5000);
ChannelsPageEditorForm.Submit();

Я не могу понять, как получить актуальный аватар для обновления.У кого-нибудь есть какие-либо советы / предложения о том, как заставить это работать?

Спасибо!

PS Я пытался использовать рекордер WatiN, чтобы увидеть то, что они рекомендовали, но их решение тоже не сработало:

public Div BrandingEditorDiv
{
    get
    {
        return Document.Div(Find.ById("branding-editor-content"));
    }
}

public FileUpload AvatarFileUpload
{
    get
    {
        return Document.FileUpload(Find.ByName("image") && Find.ById("image-upload-file-input"));
    }
}

BrandingEditorDiv.Click();
AvatarFileUpload.Set(AvatarLocation);
...